簡體   English   中英

GLEW Vertex Shader編譯錯誤

[英]GLEW Vertex Shader compile error

我最近開始在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;

}

我認為頂點有問題,如果有人可以幫助,我將不勝感激。 謝謝。

字符串Vertex4Matrix對GLSL沒有意義。 GLSL中的類型是vec4mat4類的東西

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM