我正在使用这段代码来检查我的 glsl 着色器是否编译正常。
glGetObjectParameterivARB(obj, GL_OBJECT_INFO_LOG_LENGTH_ARB, &infologLength);
if (infologLength > 1)
{
int charsWritten = 0;
char * const infoLog = new char[infologLength];
glGetInfoLogARB(obj, infologLength, &charsWritten, infoLog);
tError(infoLog, false);
delete infoLog;
}
}
返回字符串的长度在 nvidia 和 ATI 卡上为空,但在 intel 卡上返回字符串“no errors”。
如果真的没有错误,现在找出最好的方法是什么?我应该只检查这个字符串吗?或者这个函数 glGetInfoLogARB 应该返回什么?
最佳答案
尝试
bool CompileSuccessful(int obj) {
int status;
glGetShaderiv(obj, GL_COMPILE_STATUS, &status);
return status == GL_TRUE;
}
检查着色器是否编译成功
bool LinkSuccessful(int obj) {
int status;
glGetProgramiv(obj, GL_LINK_STATUS, &status);
return status == GL_TRUE;
}
检查整个程序是否链接成功。
关于OpenGL/GLSL 检查着色器是否在英特尔卡上正常编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2663220/