GLSL片段着色器无法编译

时间:2012-12-05 19:46:22

标签: iphone ios6 opengl-es-2.0

我完全被这里难住了。我有以下片段着色器工作:

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着色器工作。我在这个应用程序中有与所有其他应用程序中相同的着色器编译代码,所以我知道该部分工作正常。我能做些什么来找到有关问题的信息?

1 个答案:

答案 0 :(得分:3)

编译着色器后,您可以检查GL_COMPILE_STATUS是否为GL_FALSE,您可以使用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.");
}