在使用多个着色器时是否应使用帧缓冲对象

时间:2014-05-13 15:05:34

标签: glsl

我应该使用帧缓冲对象当我有2个着色器改变颜色,但后者需要知道前一个着色器将片段颜色设置为。

1 个答案:

答案 0 :(得分:1)

最有可能。

你的问题的措辞(" 2个着色器改变颜色" - 所以着色器#1已经消耗了它改变的输入图像/纹理?)不是100明确你正在努力实现的目标 您可能需要的不仅仅是一个纹理,而且可能需要多个FBO。但总的来说,正如我理解你的意图,是的,FBO将是你想要使用的。

如果希望片段着色器#2访问片段着色器#1的输出,则使用着色器#1渲染到绑定到FBO的纹理,然后在着色器#2中从该纹理获取是最直接的方法。它也是最兼容的方式,即使使用10年前的硬件也是如此 这甚至适用于乒乓球和乒乓球。方式(使用两个纹理,并交换它们),例如,如果您进行数值积分。这是每个人在计算着色器到来之前进行物理模拟的方式。

如果你想要做的事情是更常见的"着色器1产生一些数据,着色器2消耗它来产生一些其他数据,而不一定是相同的大小/数量",那么你可能会想要使用着色器存储对象。

或者,如果两个着色器真的只是一个接一个地运行(所以基本上每个像素都按顺序处理),您可以考虑将两个着色器合并为一个而不产生中间纹理,这对带宽更有效和ROP /混合,也可能具有更好的准确性。