2016-03-12 50 views
-1

我最近開始研究GLEW中的Vertex和Fragment着色器。出於某種原因,我得到了編譯着色器錯誤的失敗。GLEW Vertex Shader編譯錯誤

我得到的錯誤是如下:

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; 

}

我認爲頂點有問題,如果任何人都可以幫助,我會很感激。謝謝。

回答

2

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

+0

哦。我認爲Vec4和Mat4應該是我創建的課程。不是GLEW內置。謝謝。 – Kurieita

+1

它們與GLEW無關 - 着色器是用GLSL編寫的,它是一種獨立於C或C++的完全獨立的語言。 –