我有一些 Cg 顶点着色器,并希望从中获取已编译的二进制文件以进行缓存。
我加载 Cg 顶点的方式是使用 glProgramStringARB,问题是我无法从 glGetProgramiv 和 glGetProgramBinary 检索任何值。
这是我正在做的示例代码:
CGprogram program = cgCreateProgram(context, CG_SOURCE, source, ...);
const char* programARB = static_cast<char*>(cgGetProgramString(program,
CG_COMPILED_PROGRAM));
GLuint id;
glGenProgramsARB(1, id);
glBindProgramARB(GL_VERTEX_PROGRAM_ARB, id);
glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
static_cast<GLsizei>(strlen(programARB)), programARB);
GLint length = -10;
glGetProgramiv(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_BINARY_LENGTH, &lenght);
printf("LENGTH: %d\n", length);
我用 -10 初始化长度只是为了看看变量是否会随着 glGetProgramiv 调用而改变,但我总是得到 -10 作为结果。