2012-12-05 166 views
1

我完全難住在這裏。我有以下片段着色器的工作:GLSL片段着色器不會編譯

varying lowp vec4 fposition; 
varying lowp vec4 fcolor; 
varying lowp vec2 ftexturecoordinates; 


void main() { 
    gl_FragColor = fcolor; 
} 

如果我試圖在所有(例如:vec4 light position = vec4(-2.0, 2.0, 1.0, 1.0))添加什麼,它不會編譯。我無法弄清楚如何獲取錯誤代碼/描述,但我無法獲得任何正常的OpenGL ES着色器的工作。我在所有其他應用程序中都具有相同的着色器編譯代碼,因此我知道該部分工作正常。如果有的話,我能做些什麼來找到有關問題的信息?

回答

3

在編譯着色器之後,如果它是GL_FALSE,則可以檢查GL_COMPILE_STATUS,您可以使用glGetShaderInfoLog來獲取有關編譯錯誤的其他信息。

這裏是一個片段,展示瞭如何使用glGetShaderInfoLog:(我離開了項目的具體錯誤檢查,以供參考,但評論它,因爲它不會沒有它周圍的框架工作)

glCompileShader(shader); 
//mada_check_gl_error(); 

GLint compiled; 
glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled); 
//mada_check_gl_error(); 
if (!compiled) 
{ 
    GLint length; 
    glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length); 
    //mada_check_gl_error(); 
    if (length > 0) 
    { 
     GLint infoLength; 
     char* infoBuf = (char*) malloc(sizeof(char) * length); 
     glGetShaderInfoLog(shader, length, &infoLength, infoBuf); 
     //mada_check_gl_error(); 
     //mada_log(logERROR, infoBuf); 
     free(infoBuf); 
     //SysUtils::error("Error compiling shader. See log for info."); 
    } 
    //SysUtils::error("Failed to compile shader. No further info available."); 
} 
+0

謝謝。這正是我需要的。 – Justin