【问题标题】:GLSL Syntax error: "in" parse errorGLSL 语法错误:“in”解析错误
【发布时间】:2013-12-17 20:22:37
【问题描述】:

我正在尝试在我的程序中使用着色器,但我遇到了非常奇怪的错误...

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;
}

【问题讨论】:

    标签: c++ opengl glsl shader parse-error


    【解决方案1】:

    您缺少in 行末尾的分号。

    你有:

    in vec3 vVertex
    in vec3 vColor
    

    你应该有:

    in vec3 vVertex;
    in vec3 vColor;
    

    【讨论】:

    • 你说得对,谢谢!我还在片段着色器中错误命名了输出向量。当您从许多来源复制粘贴代码时,就会发生这种情况......
    • @user2843974 另外,请注意,某些 GPU 不喜欢在 #version 指令之前使用 cmets。所以在某些情况下,这也可能是无法编译着色器的原因。
    • 确实,#version 应该在第一行。某些版本的 GLSL 允许在它之前使用 cmets(例如 GLSL ES 1.0),而其他版本则要求它必须是第一行 period(例如 GLSL ES 3.0)。我会坚持将它放在第一行,因为随着版本号的增加,行尾和空格规则可能会变得更加严格,并且您希望预处理器在对哪些字符终止单个进行任何假设之前解析版本指令线 cmets。请参阅:GLSL ES 3.0 Section 12.44
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 2012-07-04
    相关资源
    最近更新 更多