使用Xcode的顶点/片段着色器输出语法错误

时间:2016-06-06 01:20:24

标签: c++ opengl shader

我正在使用Visual Studio完成关于着色器的教程...我在ElCapitan上使用Xcode。

我的readShaderCode()函数将shaderCode文件内容(vertex.glsl和fragment.glsl)传递给控制台 - 只是为了确保 - 以及OpenGL版本。

所以这段代码适用于Windows但不适用于我的机器!我无法看清问题是什么,如果有人能为我解决这个问题,我会非常感激!谢谢。并感谢所有有时帮助我的帖子:)

这是输出:

    Working with OpenGl: 2.1 INTEL-10.14.66

    Here is the shader Code: 
    #version 120
    #extension GL_ARB_separate_shader_objects : enable

    in layout(location=0) vec2 position;
    in layout(location=1) vec3 vertexColor;

    out vec3 theColor;

    void main() {

        gl_Position = vec4(position, 0.0, 1.0);

        theColor = vertexColor;

    }

    *****************************************
    Working with OpenGl: 2.1 INTEL-10.14.66

    Here is the shader Code: 
    #version 120
    #extension GL_ARB_separate_shader_objects : enable

    out vec4 daColor; 
    in vec3 theColor; 

    void main() { 


    daColor = vec4(theColor, 1.0); 


    } 

    *****************************************
    WARNING: 0:2: extension 'GL_ARB_separate_shader_objects' is not                 supported
    ERROR: 0:4: '(' : syntax error: syntax error

1 个答案:

答案 0 :(得分:3)

你得到完全合理的错误和警告。

  

警告:0:2:不支持扩展“GL_ARB_separate_shader_objects”

这正是它所说的。您的着色器取决于不受支持的扩展名。

  

错误:0:4:'(':语法错误:语法错误

顶点着色器的第4行只有一个(字符,因此可以清楚地说明问题所在。

此:

in layout(location=0) vec2 position;

无效 GLSL 1.20代码。 GLSL 1.20不允许in合格的全局变量,而GLSL 1.20不知道layout的含义。

您的代码是合理的#version的GLSL代码。如果另一个实现采用它,那么您依赖于实现定义的行为。