9

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

未声明的标识符 gl_FragColor

使用 GLSL 100 时,一切都很好。

4

2 回答 2

21

现代版本的 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

于 2014-11-02T02:14:18.953 回答
5

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

out vec4 FragColor;

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

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

于 2014-11-02T02:15:03.903 回答