OpenGL/GLSL 检查着色器是否在英特尔卡上正常编译

标签 opengl intel glsl

我正在使用这段代码来检查我的 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/

相关文章:

debugging - 你们如何调试 GLSL?

c++ - 为什么这个循环每次迭代需要 1.32 个周期

assembly - Intel x64 arch 的 Rex 前缀解码

opengl - 为什么 golang gomobile basic example 为 vec4 属性设置 3-float 大小?

java - OpenGL 2D 碰撞检测不起作用

c++ - OpenGL多子窗口问题

c++ - 如何在 openGL 中乘以矩阵

arrays - gfortran 中隐含 do 的数组构造函数的奇怪初始化行为

c++ - 在GLFW窗口中启用多重采样不会提高抗锯齿的质量

glsl - 插入几何着色器中的常数限制?