使用gl_FragColor与输出vec4颜色?

问题描述 投票:2回答:2

关于gl_FragColor被弃用似乎有很多含糊之处。例如,它在GLSL 4.40 specification中缺失,但它包含在GLSL 4.60 specification中。

什么是最安全,最兼容,最受支持的策略?使用gl_FragColor或定义像out vec4 color这样的着色器输出?

opengl glsl
2个回答
1
投票

是的,gl_FragColor已被弃用。您应该使用以下语法:

layout(location = 0) out vec4 diffuseColor;

它包含在7.1.7. Compatibility Profile Built-In Language Variables部分的GLSL 4.60规范中。这意味着,如果您创建核心上下文,则此变量将不可用。


1
投票

如果您仔细阅读GLSL 4.40 specification,那么您可以在“7.1.1兼容性配置文件内置语言变量”一章中找到gl_FragCoord,就像在GLSL 4.60 specification中一样。

使用兼容性配置文件时,片段着色器中提供以下片段输出变量:

out vec4 gl_FragColor;
out vec4 gl_FragData[gl_MaxDrawBuffers];

写入gl_FragColor指定将由后续固定功能管道使用的片段颜色。如果后续的固定功能消耗片段颜色并且片段着色器可执行文件的执行不会将值写入gl_FragColor,则消耗的片段颜色未定义。

这意味着你不能在gl_FragColor中使用OpenGL Core profile Context,因为它已被弃用,但它仍然可以在兼容性配置文件中使用。

从片段着色器写入输出缓冲区的现代方法是声明user-defined output variables并使用Layout Qualifiers

© www.soinside.com 2019 - 2024. All rights reserved.