帧缓冲区可以包含多个附加图像,允许片段着色器写入多个输出值。gl_FragColor只是一个单一的vec4,所以它不能准确匹配硬件的功能。
现在,您可以转过头来询问为什么gl_FragData被删除,因为这是一个足够大的数组,可以表示附加图像的最大数量。已删除,因为它gl_FragData是一个vec4[]数组。这意味着它是一个浮点向量数组。但并非所有附件图像都必须使用浮点图像格式。您也可以使用整数图像格式(不仅仅是标准化整数,而是真正的整数)。
如果要将整数值写入附加到 FBO 的整数图像,则片段着色器的值必须是整数。因此,表示该输出的变量需要是整数类型,而不是浮点类型。你不能用数组来做到这一点;每个单独的输出变量都需要有一个单独的类型。
只有当您允许用户自己声明特定的输出变量时才会发生这种情况。而一旦你给用户这样做的权力,gl_FragData并gl_FragColor没有任何意义。