当我切换到使用OpenGL ES 3和GLSL 300时,我的片元着色器遇到了以下错误
未声明标识符gl_FragColor
当使用GLSL 100时,一切正常。
当我切换到使用OpenGL ES 3和GLSL 300时,我的片元着色器遇到了以下错误
未声明标识符gl_FragColor
当使用GLSL 100时,一切正常。
现代版本的GLSL使用out
值来进行片段着色器输出,因此不再支持gl_FragColor
,这就是你遇到错误的原因。请尝试以下方法:
out vec4 fragColor;
void main()
{
fragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
请注意,gl_FragDepth
没有改变,并且仍然可用。在GLSL ES 3.00中,预定义变量gl_FragColor
已经不存在了。您需要为片段着色器的输出定义自己的out
变量。您可以使用任何名称,例如:
out vec4 FragColor;
void main() {
...
FragColor = ...;
}
这遵循完整OpenGL的核心配置文件。没有预定义的片段着色器输出的原因是它在多个渲染目标和需要除浮点向量之外的类型的渲染目标上扩展性不好。
fragColor
是输出变量呢?如果我有多个输出怎么办? - mackycheese21GL_draw_buffers
时,上述内容将变为gl_FragData[0] = ...
,同时需要在其他地方进行适当的绘制缓冲设置/绑定。 - Richard Viney