1

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

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

4

1 回答 1

3

编译着色器后,您可以检查GL_COMPILE_STATUSif it is GL_FALSE,您可以使用 useglGetShaderInfoLog获取有关编译错误的其他信息。

这是一个展示如何使用 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.");
}
于 2012-12-05T20:14:34.487 回答