顶点着色器编译失败,但信息日志中没有消息



我正在尝试设置一个简单的顶点着色器。当我编译它时,它失败了(根据GL_COMPILE_STATUS),但是info日志是空的,从调试的角度来看,我没有什么可做的。

下面是我的代码:
GLuint vertexShader, fragmentShader;
char *code =
"void main(void)
{
    vec4 a = gl_Vertex;
    a.x = a.x * 0.5;
    a.y = a.y * 0.5;
    gl_Position = gl_ModelViewProjectionMatrix * a;
}";

int length = strlen(code);
vertexShader = glCreateShader(GL_VERTEX_SHADER);
//fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(vertexShader, 1, &code, &length);
glCompileShader(GL_VERTEX_SHADER);
GLint compiled;
GLint logLength;
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &compiled);
glGetShaderiv(vertexShader, GL_INFO_LOG_LENGTH , &logLength);
if (logLength > 1)
{
    GLchar* compiler_log = (GLchar*)malloc(logLength);
    glGetShaderInfoLog(vertexShader, logLength, 0, compiler_log);
    printf("%sn", compiler_log);
    free (compiler_log);
}

我知道这是相当混乱的,因为我是新的着色器,我确信有一些错误与我的着色器代码。然而,最让我恼火的是调试信息的缺乏。上面的代码导致compiledGL_FALSE(表示代码编译失败),logLength为0(表示信息日志为空)。到底发生了什么事?这不就是信息日志的意义吗?

glCompileShader接受从glCreateShader返回的着色器编号,而不是着色器类型。

在本例中

glCompileShader(GL_VERTEX_SHADER);
应该

glCompileShader(vertexShader);

最新更新