2010-04-18 38 views
2

我使用此代码检查我的glsl着色器是否编译正常。OpenGL/GLSL检查着色器在intel卡上编译是否正常

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应该返回的函数?

+1

glGetInfoLogARB仅用于调试目的,所以不,没有标准。 – yuriks 2010-04-18 17:56:08

回答

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

检查整个程序被成功连接。

+0

谢谢,但它似乎不适用于我的英特尔卡。状态的值完全没有改变。 – clamp 2010-04-18 18:12:57

+0

您的intel卡是否支持使用着色器的必要扩展? – Danvil 2010-04-18 18:50:59

+0

是的,他们这样做。它应该支持openGL 2.0 – clamp 2010-04-20 11:39:16