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

OpenGL在不使用N个目标的情况下混合以前的N个渲染,opengl,Opengl,通过在同一FBO中具有5个渲染目标,我在每一帧混合了之前的5个渲染。在每一帧我都绑定 base_target + frame%5 在片段着色器中,我遍历了从base_target到base_target+4的所有纹理,将它们相加并显示结果。它很好用,但我想混合更多,比如10。问题是渲染目标的最大数量是8 有没有办法克服这个问题?我是否可以拥有一个渲染目标,它实际上是一个包含大量元素的纹理数组,然后在每次迭代时选择要渲染到的纹理中的哪一个?实际上只需要三个渲染目标: 第一个RT是累积缓冲区 第

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

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


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

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

  • 第一个RT是累积缓冲区
  • 第二个RT是当前帧缓冲区
  • 第三个RT是临时缓冲区
算法:

  • 将当前帧渲染为当前RT
  • 将累积RT与当前RT混合,并将结果放入临时RT
  • 交换累积RT和临时RT
  • 当前累积RT

  • 你考虑过使用纹理阵列吗?这就是我的想法,但我只是从中读到,我从来没有将它们用作渲染目标。你能给我演示一下如何将纹理数组添加到fbo并渲染到数组中的特定纹理(然后在下一帧切换到下一个纹理)的示例代码吗?我不确定我是否理解你想要什么,但我可以给你这个指针。所以通常我会做glDrawBuffers并告诉要绘制的目标,然后在着色器中写入布局(location=n)什么。在纹理数组的情况下,我会将fbo仅与一个目标绑定(我假设该数组是单个目标),然后如何告诉它写入第三个纹理?如所述,您可以指定(在几何体着色器中)在纹理的哪个层上渲染基元。