OpenGL在不使用N个目标的情况下混合之前的N个渲染

时间:2014-07-22 10:15:32

标签: opengl

我通过在同一个FBO中拥有5个渲染目标,在每个帧中混合我之前的5个渲染。在每一帧我绑定

base_target + frame%5

在片段着色器中,我遍历从base_target到base_target + 4的所有纹理并将它们相加并显示结果。它工作正常,但我想混合更多,如10。问题是渲染目标的最大数量是8.

有没有办法克服这个问题?我是否可以拥有一个渲染目标,实际上是一个具有大量元素的纹理数组,然后在每次迭代时选择要渲染到哪个纹理?

1 个答案:

答案 0 :(得分:1)

实际上只需要三个渲染目标:

  • 第一个RT是累积缓冲区。
  • 第二个RT是CURRENT帧缓冲区。
  • 第3个RT是TEMPORARY缓冲区。

算法:

  1. 将当前帧渲染为CURRENT RT。
  2. 将ACCUMULATION RT与CURRENT RT混合,并将结果放入TEMPORARY RT。
  3. 交换累积RT和TEMPORARY RT。
  4. 目前的累积RT。