2010-04-18 37 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