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;
}
你是對的,謝謝! 我也在frag着色器中錯過了輸出向量。 那就是當你從許多來源複製粘貼代碼時會發生什麼...... – ddl
@ user2843974另外,請注意,某些GPU不喜歡在'#version'指令之前進行註釋。所以這在某些情況下也可能是Shader無法編譯的原因。 – Vallentin
我會記住,謝謝! – ddl