gl_FragColor弃用似乎有很多歧义。例如,在GLSL 4.40规范中缺少它,但是在GLSL 4.60规范中包括了它。
什么是最安全,最兼容,最受支持的策略?使用gl_FragColor或定义着色器输出,如out vec4 color?
是的,gl_FragColor已弃用。您应该使用以下语法:
layout(location = 0) out vec4 diffuseColor;
Run Code Online (Sandbox Code Playgroud)
它包含在 GLSL 4.60 规范下的 部分7.1.7. Compatibility Profile Built-In Language Variables。这意味着,如果您创建核心上下文,则此变量将不可用。
如果您仔细阅读GLSL 4.40 规范,那么您会在“7.1.1 兼容性配置文件内置语言变量”gl_FragCoord一章中找到 ,就像在GLSL 4.60 规范中一样。
使用兼容性配置文件时,片段着色器中可以使用以下片段输出变量:
Run Code Online (Sandbox Code Playgroud)out vec4 gl_FragColor; out vec4 gl_FragData[gl_MaxDrawBuffers];写入
gl_FragColor指定后续固定功能管道将使用的片段颜色。如果后续固定功能消耗片段颜色并且片段着色器可执行文件的执行未写入值,则gl_FragColor消耗的片段颜色是未定义的。
这意味着您不能gl_FragColor在OpenGL Core 配置文件 Context中使用, 因为它已被弃用,但它仍然可以在兼容性配置文件中使用。
从片段着色器写入输出缓冲区的现代方法是声明用户定义的输出变量并使用布局限定符。