【问题标题】:When switching to GLSL 300, met the following error切换到 GLSL 300 时,遇到以下错误
【发布时间】:2014-12-28 23:43:18
【问题描述】:

当我切换到使用带有 GLSL 300 的 OpenGL ES 3 时,我在片段着色器中遇到了以下错误

未声明的标识符 gl_FragColor

使用 GLSL 100 时,一切正常。

【问题讨论】:

    标签: glsl glsles opengl-es-3.0


    【解决方案1】:

    现代版本的 GLSL 仅通过将它们声明为 out 值来执行片段着色器输出,并且不再支持 gl_FragColor,因此您的错误。试试这个:

    out vec4 fragColor;
    void main()
    {
        fragColor = vec4(1.0, 0.0, 0.0, 1.0);
    }
    

    请注意,gl_FragDepth 没有更改,仍然可用。

    欲了解更多信息,请参阅https://www.opengl.org/wiki/Fragment_Shader

    【讨论】:

    • 我如何告诉 OpenGL fragColor 是输出变量?如果我有多个输出怎么办??
    • 当使用GL_draw_buffers 时,上面会变成gl_FragData[0] = ...,以及其他地方的适当绘图缓冲区设置/绑定。
    【解决方案2】:

    预定义变量 gl_FragColor 在 GLSL ES 3.00 中不再存在。您需要为片段着色器的输出定义自己的out 变量。您可以使用任何您想要的名称,例如:

    out vec4 FragColor;
    
    void main() {
        ...
        FragColor = ...;
    }
    

    这遵循完整 OpenGL 的核心配置文件。没有预定义片段着色器输出的原因是它不能很好地缩放多个渲染目标,以及需要浮点向量以外的类型的渲染目标。

    【讨论】:

      猜你喜欢
      • 2016-09-29
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多