opengl - gl_FragColor 被移除的原因
问题描述
为什么我们现在要定义一个新的vec4
变量,而把预定义gl_FragColor
的去掉呢?
解决方案
帧缓冲区可以包含多个附加图像,允许片段着色器写入多个输出值。gl_FragColor
只是一个单一的vec4
,所以它不能准确地匹配硬件的能力。
现在,您可以转身问为什么gl_FragData
要删除,因为这是一个足够大的数组,可以表示附加图像的最大数量。那被删除了,因为gl_FragData
它是一个vec4[]
数组。这意味着它是一个浮点向量数组。但并非所有附件图像都必须使用浮点图像格式。您也可以使用整数图像格式(不仅是标准化整数,还有真正的整数)。
如果要将整数值写入附加到 FBO 的整数图像,则来自片段着色器的值必须是整数。所以表示该输出的变量需要是整数类型,而不是浮点类型。你不能用数组来做到这一点;每个单独的输出变量都需要能够具有单独的类型。
只有当您允许用户自己声明特定的输出变量时,才会发生这种情况。一旦你赋予用户这样做的权力,gl_FragData
并且gl_FragColor
没有任何目的。
推荐阅读
- java - 在同一个 Android Studio 页面中显示两个 listView
- java - JavaFX 边框和标签
- java - 如何解决来自服务器(测试)的内部错误?
- sql - BigQuery comma delimited string evaluation
- javascript - 在 fullcalendar 上放置的事件会自动发送到保存该特定数据的日期槽
- performance - Tensorflow 数据集 API 获取大批量数据的速度很慢
- ios - 带有过滤器的 AudioKit 导出文件
- r - 在 R 中过滤的信号
- ios - UICollectionView 水平分页仅在第一页上每行显示 3 个单元格
- ios - 谷歌分析没有显示 ios 的数据