2012-12-05 66 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