当我切换到使用OpenGL ES 3和GLSL 300时,我在frag shader中遇到以下错误
未声明的标识符gl_FragColor
使用GLSL 100时,一切都很好。
答案 0 :(得分:11)
GLSL的现代版本只需将它们声明为out
值即可对着色器输出进行分段,并且不再支持gl_FragColor
,因此您的错误。试试这个:
out vec4 fragColor;
void main()
{
fragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
请注意gl_FragDepth
尚未更改且仍然可用。
答案 1 :(得分:4)
GLSL ES 3.00中不再存在预定义变量gl_FragColor
。您需要为片段着色器的输出定义自己的out
变量。您可以使用任何名称,例如:
out vec4 FragColor;
void main() {
...
FragColor = ...;
}
这遵循完整OpenGL的核心配置文件。没有预定义片段着色器输出的原因是它不能很好地适应多个渲染目标,以及需要浮动矢量以外类型的渲染目标。