如何解决gl_FragColor被删除的原因
为什么我们现在必须定义一个新的vec4
变量,并删除预定义的gl_FragColor
?
解决方法
帧缓冲区可以包含多个附加图像,从而允许片段着色器写入多个输出值。 uint
只是单个gl_FragColor
,因此它与硬件功能无法准确匹配。
现在,您可以转过头来询问为什么删除vec4
,因为这是一个足够大的数组,可以代表最大数量的附加图像。由于gl_FragData
是gl_FragData
数组,因此将其删除。这意味着它是浮点向量的数组。但并非所有附件图像都必须使用浮点图像格式。您也可以使用整数图像格式(不仅可以使用归一化的整数,还可以使用真正的整数)。
如果要将整数值写入连接到FBO的整数图像,则片段着色器中的值必须是整数。因此代表输出的变量必须是整数类型,而不是浮点类型。您不能使用数组来做到这一点;每个单独的输出变量都必须具有单独的类型。
仅当您允许用户自己声明特定的输出变量时,这种情况才会发生。并且一旦您赋予用户执行此操作的权力,vec4[]
和gl_FragData
就没有用了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。