首页 > 解决方案 > gl_FragColor 被移除的原因

问题描述

为什么我们现在要定义一个新的vec4变量,而把预定义gl_FragColor的去掉呢?

标签: openglglsl

解决方案


帧缓冲区可以包含多个附加图像,允许片段着色器写入多个输出值。gl_FragColor只是一个单一的vec4,所以它不能准确地匹配硬件的能力。

现在,您可以转身问为什么gl_FragData要删除,因为这是一个足够大的数组,可以表示附加图像的最大数量。那被删除了,因为gl_FragData它是一个vec4[]数组。这意味着它是一个浮点向量数组。但并非所有附件图像都必须使用浮点图像格式。您也可以使用整数图像格式(不仅是标准化整数,还有真正的整数)。

如果要将整数值写入附加到 FBO 的整数图像,则来自片段着色器的值必须是整数。所以表示该输出的变量需要是整数类型,而不是浮点类型。你不能用数组来做到这一点;每个单独的输出变量都需要能够具有单独的类型。

只有当您允许用户自己声明特定的输出变量时,才会发生这种情况。一旦你赋予用户这样做的权力,gl_FragData并且gl_FragColor没有任何目的。


推荐阅读