2013-12-17 263 views
0

我想在我的程序中使用着色器,但我發現很奇怪的錯誤...GLSL語法錯誤:「在」語法錯誤

Vertex shader failed to compile with the following error 
ERROR: 0:6: error(#132) Syntax error: "in" parse error 
ERROR: error(#273) 1 compilation errors. No code generated 

我認爲問題是與文件讀取,但嘗試了很多方法後,仍然無法正常工作。

因此,這裏是我的代碼:

bool ShaderProgram::LoadShaderFile(const char* shader_path, GLuint& shader_id) 
{ 
    ifstream oFileStream(shader_path); 
    if(oFileStream) 
    { 
     // Load shader code 
     string sShaderSource; 
     sShaderSource.assign((istreambuf_iterator<char> (oFileStream)), istreambuf_iterator<char>()); 

     // Forward shader code to OGL 
     const GLchar* chShaderSource = sShaderSource.c_str() + '\0'; 
     printf("%s", chShaderSource); 
     glShaderSource(shader_id, 1, (const GLchar**) &chShaderSource, NULL); 


     return true; 
    } 
    else 
     return false; 

} 

我的着色器:

// shader.vs 
// Vertex Shader 
#version 330 

in vec3 vVertex 
in vec3 vColor 

smooth out vec4 vVaryingColor; 

void main() 
{ 
    vVaryingColor = vec4(vColor, 1.0); 
    gl_Position = vec4(vVertex, 1.0); 
} 


// shader.fs 
// Fragment Shader 
#version 330 

smooth in vec4 vVeryingColor; 
out vec4 vVaryingColor; 

void main() 
{ 
    vFragColor = vVaryingColor; 
} 

回答

8

你缺少在in線末端的分號。

您有:

in vec3 vVertex 
in vec3 vColor 

你應該有:

in vec3 vVertex; 
in vec3 vColor; 
+0

你是對的,謝謝! 我也在frag着色器中錯過了輸出向量。 那就是當你從許多來源複製粘貼代碼時會發生什麼...... – ddl

+1

@ user2843974另外,請注意,某些GPU不喜歡在'#version'指令之前進行註釋。所以這在某些情況下也可能是Shader無法編譯的原因。 – Vallentin

+0

我會記住,謝謝! – ddl