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

Ada*_*Lee 6 glsl glsles opengl-es-3.0

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

未声明的标识符gl_FragColor

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

Ric*_*ney 13

现代版本的GLSL只是通过将它们声明为out值来对着色器输出进行分段,并且gl_FragColor不再受支持,因此您的错误.试试这个:

out vec4 fragColor;
void main()
{
    fragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

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

有关更多信息,请参阅https://www.opengl.org/wiki/Fragment_Shader

  • 我如何告诉 OpenGL `fragColor` 是输出变量?如果我有多个输出怎么办? (2认同)

Ret*_*adi 5

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

out vec4 FragColor;

void main() {
    ...
    FragColor = ...;
}
Run Code Online (Sandbox Code Playgroud)

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