void* TextureProcessorMain(std::vector<std::string>* args) { auto start = std::chrono::high_resolution_clock::now(); std::string filename; int numArgs = args->size(); if (numArgs > 0) { filename = (*args)[0]; } else { cout << "ERROR : You must specify a filename."; cin.get(); } if (numArgs > 1) { for (int i = 1; i < numArgs; ++i) { std::string argument = (*args)[i]; if (argument.find("texformat") != string::npos) { if (numArgs >= i + 1) texFormat = (TEXTURE_FORMAT)atoi((*args)[i + 1].c_str()); else cout << "Please provide a valid texture format."; } else if (argument.find("mipmaps") != string::npos) { generateMipmaps = true; } else if (argument.find("memory") != string::npos) { useMemory = true; } else if (argument.find("reverse") != string::npos) { reverseChannels = true; } else if (argument.find("flipvertical") != string::npos) { flipVertically = true; } } } string extension = filename.substr(filename.find(".") + 1); ImageLoader* loader = NULL; if (extension == "jpg" || extension == "jpeg") { loader = new JpegLoader(); } else if (extension == "png") { loader = new PngLoader(); } else if (extension == "bmp") { loader = new BmpLoader(); } /*ilInit(); ilEnable(IL_FILE_OVERWRITE); ilEnable(IL_ORIGIN_SET); ilSetInteger(IL_ORIGIN_MODE, IL_ORIGIN_UPPER_LEFT); */ auto startLoad = std::chrono::high_resolution_clock::now(); loader->Load(filename, reverseChannels == true ? ImageLoader::PixelChannelOrder::ORDER_BGR : ImageLoader::PixelChannelOrder::ORDER_RGB); if (flipVertically) loader->FlipVertically(); auto endLoad = std::chrono::high_resolution_clock::now(); long long timeLoad = std::chrono::duration_cast<std::chrono::milliseconds>(endLoad - startLoad).count(); //TextureLoader loader = TextureLoader(filename.c_str()); //std::cout << "timeLoad : " << timeLoad << "\n"; //loader.SetTextureFormat(texFormat); auto startMip = std::chrono::high_resolution_clock::now(); if(generateMipmaps) loader->GenerateMipmaps(); auto endMip = std::chrono::high_resolution_clock::now(); long long timeMip = std::chrono::duration_cast<std::chrono::milliseconds>(endMip - startMip).count(); // std::cout << "timeMip : " << timeMip << "\n"; if (!useMemory) { // Texture loaded, now write a binary file. filename = strtok((char *)filename.c_str(), "."); // Remove the extension. char* extension = strtok(NULL, "."); // Get the new filename with extension .bbt filename = strtok((char*)filename.c_str(), "."); // Remove the extension. filename += ".bbt"; loader->WriteBinary(filename.c_str(), generateMipmaps); delete loader; } else // Memory. { /*auto startMem = std::chrono::high_resolution_clock::now(); int totalSize = jpegLoader->GetTotalSizeToWrite(); char* memory = AllocateMem(totalSize); jpegLoader->WriteMemory(memory, generateMipmaps); auto endMem = std::chrono::high_resolution_clock::now(); auto timeMem = std::chrono::duration_cast<std::chrono::milliseconds>(endMem - startMem).count(); auto end = std::chrono::high_resolution_clock::now(); auto time = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count(); SetBinary(memory); return memory; */ return loader; } return 0; }