GLEW Vertex Shader编译错误

时间:2016-03-12 18:43:09

标签: c++ glsl glew

我最近开始研究GLEW中的顶点和片段着色器。出于某种原因,我收到了编译着色器错误的错误。

我得到的错误如下:

Failed to compile vertex shader: Vertex shader failed to compile with the following errors:
ERROR: 0:3 error (#12) Unexpected qualifier.
ERROR: 0:3 error(#132) Syntax error: "position" parse error
ERROR: error(#273) 2 compilation errors. No code generated.

包含着色器代码的文本文档是:

#version 330 core

layout (location = 0) in Vector4 position;

uniform Matrix pr_matrix;
uniform Matrix vw_matrix = Matrix(1, 0);
uniform Matrix ml_matrix = Matrix(1, 0);

void main()
{
    gl_Position = /*pr_matrix **/ position;
}

编译着色器的代码是:

GLuint Shader::load() {
        GLuint program = glCreateProgram();
        GLuint vertex = glCreateShader(GL_VERTEX_SHADER);
        GLuint fragment = glCreateShader(GL_FRAGMENT_SHADER);

        std::string vertexSourceString = File::read_file(mVertex);
        std::string fragmentSourceString = File::read_file(mFragment);

        const char* vertexSource = vertexSourceString.c_str();
        const char* fragmentSource = fragmentSourceString.c_str();

        glShaderSource(vertex, 1, &vertexSource, NULL);
        glCompileShader(vertex);

        GLint result;
        glGetShaderiv(vertex, GL_COMPILE_STATUS, &result);

        if (result == GL_FALSE) {
            GLint length;
            glGetShaderiv(vertex, GL_INFO_LOG_LENGTH, &length);
            std::vector<char> error(length);
            glGetShaderInfoLog(vertex, length, &length, &error[0]);
            std::cout << "Failed to compile vertex shader: " << &error[0] << std::endl;
            glDeleteShader(vertex);

            return 0;
        }

        glShaderSource(fragment, 1, &fragmentSource, NULL);
        glCompileShader(fragment);
        glGetShaderiv(fragment, GL_COMPILE_STATUS, &result);

        if (result == GL_FALSE) {
            GLint length;
            glGetShaderiv(fragment, GL_INFO_LOG_LENGTH, &length);
            std::vector<char> error(length);
            glGetShaderInfoLog(fragment, length, &length, &error[0]);
            std::cout << "Failed to compile fragment shader: " << &error[0] << std::endl;
            glDeleteShader(fragment);

            return 0;
        }

        glAttachShader(program, vertex);
        glAttachShader(program, fragment);
        glLinkProgram(program);
        glValidateProgram(program);
        glDeleteShader(vertex);
        glDeleteShader(fragment);

        return program;

}

我认为顶点有问题,如果有人可以提供帮助我会很感激。谢谢。

1 个答案:

答案 0 :(得分:3)

字符串Vertex4Matrix对GLSL没有任何意义。 GLSL中的类型包括vec4mat4