切换到GLSL 300时,遇到以下错误

时间:2014-11-02 01:56:27

标签: glsl glsles opengl-es-3.0

当我切换到使用OpenGL ES 3和GLSL 300时,我在frag shader中遇到以下错误

未声明的标识符gl_FragColor

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

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:4)

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

out vec4 FragColor;

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

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