多个FBO或多个附件或FBO“双缓冲”用于堆肥图像

时间:2015-02-11 12:33:14

标签: opengl textures fbo render-to-texture sharpgl

场合

我正在写一个图像合成器,我正在使用FBO。

由于gl无法读取当前正在写入的纹理,目前我正在使用伪" Fbo Flip Chain"逻辑。我创建了一个大约10个FBO的列表,每次渲染时我都会移动到下一个FBO,它可以很快地读取之前的FBO纹理。

然而这是非常有缺陷的,因为我正在进行堆肥的方式,当fbo在当前状态下仍然需要时可以被覆盖。我绑了一个"锁定/解锁"逻辑,但它很有趣。

图像目前经历以下阶段:

  • 将图像绘制到纹理(使用fbo)
    • fbo flip
  • 复合所有图像"孩子"到图像
    • 每个孩子的fbo翻转这是问题
  • 将图片转换为目标类型
    • fbo flip
  • 将图像与目的地混合
    • fbo flip
  • 传递纹理以与兄弟姐妹一起堆肥

我决定重新考虑这种翻转链合成的想法。我看到它的方式,最好做以下其中一种:

可能的解决方案

  1. 每个图片都包含自己的多个fbos ,每个图片都有自己的渲染目标,在每个阶段切换到指定的fbo *
  2. 每张图片都包含一个fbo和多个纹理目标,更改每个阶段的附件*
  3. 每张图片都有 2个渲染目标("前面","后面"),会有 1个主fb 并且主fbo会覆盖"前面"纹理,同时阅读" back"纹理(更像是后缓冲区和前缓冲区)。在每个阶段结束时*交换它们。
  4. *(每个阶段=当前正在执行翻转的地方)

    我目前倾向于2号,每个图像最终会有4/5纹理,这将被指定给每个阶段。当图像被"绘制"它可以测试它是否可以从不同的阶段开始绘制。

    e.g。图像已经绘制并且已经转换为正确的类型,因此请使用" post_convert"纹理,只是混合。

    问题

    • 我不确定哪个更快,附加和分离渲染目标。或绑定FBO ......
    • 目前有大量的纹理和fbos被抛出。而且我非常警惕我在C#中用GL编程所以我需要确定一个管理gl内存和C#GC的系统。

0 个答案:

没有答案