正如它在锡上所说:有没有任何理由,gl_FragColor而不是使用gl_FragData[0]?如果没有,那为什么gl_FragColor甚至存在?gl_FragData从不存在的时代开始,这仅仅是遗产吗?
(是的,我知道在最新的GLSL版本中都弃用了它们,但是我仍然希望编写可以在旧卡上运行的代码.)
And*_*man 12
我将向您推荐GLSL 1.1的OpenGL规范,因为除了说它们是互斥的之外,两者之间几乎没有区别.
如果着色器静态为gl_FragColor赋值,则它可能不会为gl_FragData的任何元素赋值.如果着色器静态地将值写入gl_FragData的任何元素,则它可能不会为gl_FragColor赋值.也就是说,着色器可以将值分配给gl_FragColor或gl_FragData,但不能同时分配两者.
鉴于这种语言,gl_FragColor在不使用MRT(多个渲染目标)的着色器中应该首选.对于输出到多个缓冲区的着色器,请使用gl_FragData [n].但永远不要混淆,即使你可能在逻辑上假设它gl_FragColor是别名gl_FragData [0].
GLSL规范早于FBO,因此拥有一组输出片段数据的位置并不总是有意义的.由于GLSL和FBO都是OpenGL 3.0的核心,因此很容易将此视为理所当然.片段着色器的旧ARB扩展规范在这个主题上有一个模糊:
14)与可能的MRT(多重渲染目标)扩展的交互是什么?
The OpenGL Shading Language defines the array gl_FragData[] to output
values to multiple buffers. There are two situations to consider.
1) There is no MRT extension support. A shader can statically assign a
value to either gl_FragColor or gl_FragData[0] (but not both).
Either way the same buffer will be targeted.
2) There is MRT support. In this case what happens is defined in the
relevant MRT extension documentation.
Run Code Online (Sandbox Code Playgroud)
他们在考虑未来,但还没有完成所有的工作.无论如何,这是古老的历史.
| 归档时间: |
|
| 查看次数: |
6724 次 |
| 最近记录: |