大庆市建设中专网站,成都科技网站建设电话多少,wordpress是主机吗,全返利网站建设背景
为了提高OpenGL 着色器程序的编译和链接速度#xff0c;我们可以将程序保存为二进制进行加载#xff0c;可以大幅度提升加载效率。
方法
以下是加载和保存二进制程序的方法。
// 加载着色器程序的二进制文件到已创建的着色器程序中
bool loadPragram(const std::str…背景
为了提高OpenGL 着色器程序的编译和链接速度我们可以将程序保存为二进制进行加载可以大幅度提升加载效率。
方法
以下是加载和保存二进制程序的方法。
// 加载着色器程序的二进制文件到已创建的着色器程序中
bool loadPragram(const std::string programFilePath, unsigned int programId)
{// Load binary from filestd::ifstream inputStream(programFilePath, std::ios::binary);if (!inputStream.is_open()){inputStream.close();WARN_LOG( gl program binary file not exist! programfile:%s, programFilePath.c_str());return false;}unsigned int format 0;inputStream.read(reinterpret_castchar*(format), sizeof(GLenum));inputStream.seekg(sizeof(GLenum));std::istreambuf_iteratorchar startIt(inputStream), endIt;std::vectorchar buffer(startIt, endIt); // Load fileinputStream.close();// Install shader binaryglProgramBinary(programId, format, buffer.data(), buffer.size());int success;glGetProgramiv(programId, GL_LINK_STATUS, success);if (!success){WARN_LOG(Install gl program failed.program file:%s,program id:%d ,format:%d, programFilePath.c_str(), programId, format);return false;}INFO_LOG(load gl program success.program name:%s, programFilePath.c_str());return true;
}
// 保存着色器的二进制信息到文件中
void saveProgram(const std::string programFilePath,unsigned int programId)
{GLint length 0;glGetProgramiv(programId, GL_PROGRAM_BINARY_LENGTH, length);// Retrieve the binary codestd::vectorGLubyte buffer(length sizeof(GLenum));GLenum format 0;glGetProgramBinary(programId, length, NULL, format, buffer.data());// Write the binary to a file.std::ofstream out(programFilePath, std::ios::binary);out.write(reinterpret_castchar*(buffer.data()), length);out.close();INFO_LOG(save gl program success.program name:%s,binary format:%d, programFilePath.c_str(), format);
}