【问题标题】:OpenGL/GLSL checking if shader compiled fine on intel cardsOpenGL/GLSL 检查着色器是否在英特尔卡上编译良好
【发布时间】:2010-04-19 01:43:07
【问题描述】:

我正在使用此代码检查我的 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 应该返回什么约定?

【问题讨论】:

  • glGetInfoLogARB 仅用于调试目的,所以不,没有标准。

标签: opengl intel glsl


【解决方案1】:

试试

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

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

【讨论】:

  • 谢谢,但它似乎不适用于我的英特尔卡。 status 的值根本没有改变。
  • 您的英特尔卡是否支持使用着色器所需的扩展?
猜你喜欢
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多