2012-08-26 76 views
1

我有兩個簡單的着色器(頂點和片段)編譯的OpenGL着色器導致的語法錯誤

的Vertex Shader

#version 330 core 

//============================================= 
//---[Structs/Vertex Data]--------------------- 
//============================================= 

layout(location = 0) in vec3 vertexPosition_modelspace; 

//============================================= 
//---[Variables]------------------------------- 
//============================================= 

uniform mat4 projection; 
uniform mat4 view; 

//============================================= 
//---[Vertex Shader]--------------------------- 
//============================================= 

void main() 
{ 
    gl_Position = projection * view * vertexPosition_modelspace; 
} 

片段着色器

#version 330 core 

//============================================= 
//---[Output Struct]--------------------------- 
//============================================= 

out vec3 colour; 

//============================================= 
//---[Fragment Shader]------------------------- 
//============================================= 

void main() 
{ 
    colour = vec3(1, 0, 0); 
} 

我試圖編譯它們和我以下錯誤

錯誤C0000:語法錯誤,unexp ected $ undefined,期待「::」在標記「undefined」

我相信這可能與我閱讀文件的方式有關。下面是頂點着色器文件

std::string VertexShaderCode = FindFileOrThrow(vertex_file_path); 
std::ifstream vShaderFile(VertexShaderCode.c_str()); 
std::stringstream vShaderData; 
vShaderData << vShaderFile.rdbuf(); 
vShaderFile.close(); 

該文件的一個示例,然後使用

char const *VertexSourcePointer = VertexShaderCode.c_str(); 
glShaderSource(VertexShaderID, 1, &VertexSourcePointer , NULL); 
glCompileShader(VertexShaderID); 

我怎樣纔能有效地在文件中讀取,並避免這些錯誤編譯?

編輯:

正確編譯:

const std::string &shaderText = vShaderData.str(); 
GLint textLength = (GLint)shaderText.size(); 
const GLchar *pText = static_cast<const GLchar *>(shaderText.c_str()); 
glShaderSource(VertexShaderID, 1, &pText, &textLength); 
glCompileShader(VertexShaderID); 
+0

雖然編譯器錯誤可能意味着不同,但一個明顯的錯誤是將'mat4'與'vec3'相乘,這不應該起作用(除非較新的GLSL版本已經徹底改變了它們的類型轉換規則)。 –

+0

我已經把它改爲'mat4 viewProj = projection * view;' \t'gl_Position = viewProj * vec4(vertexPosition_modelspace,1);''''''''''''''' – user1423893

回答

6

VertexShaderCode是你,不着色器字符串。這仍然在vShaderData。您需要將該字符串從vShaderData中複製出來,並將其輸入glShaderSource

+0

我已經添加了一個我認爲正確的編輯。它可以工作,但如果看起來效率不高,我希望你能給予任何幫助。 – user1423893