2

我正在使用这段代码来检查我的 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 卡上返回字符串“无错误”。

如果真的没有错误,现在找出最好的方法是什么?我应该只检查这个字符串吗?或者这个函数 glGetInfoLogARB 应该返回什么约定?

4

1 回答 1

8

尝试

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;
}

检查整个程序是否已成功链接。

于 2010-04-18T17:43:07.253 回答