我有兩個簡單的着色器(頂點和片段)編譯的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);
雖然編譯器錯誤可能意味着不同,但一個明顯的錯誤是將'mat4'與'vec3'相乘,這不應該起作用(除非較新的GLSL版本已經徹底改變了它們的類型轉換規則)。 –
我已經把它改爲'mat4 viewProj = projection * view;' \t'gl_Position = viewProj * vec4(vertexPosition_modelspace,1);''''''''''''''' – user1423893