【发布时间】:2011-09-19 22:32:30
【问题描述】:
除了使用多个帧缓冲区对象之外,我还可以只创建一个并通过在需要时切换目标纹理来获得相同的结果吗?
- 在所有情况下这都是一个坏主意吗?如果是,为什么?
我一直在我的程序 API 中实现一个函数 render.SetTargetTexture(),如果在幕后使用更多的帧缓冲区,从逻辑上讲它是行不通的。那时我必须完全公开帧缓冲区。
【问题讨论】:
-
我从未真正对此进行过基准测试,但似乎可以确定绑定不同的 FBO 更有效。将不同的纹理绑定到 FBO 需要对帧缓冲区完整性进行复杂的一致性检查(如果您没有明确表示,那么无论如何都在驱动程序内部)。绑定一个不同的、未修改的帧缓冲区不需要那种东西。
-
我认为另一种看待它的方式是可能没关系。我不知道每帧切换目标数千次的任何应用程序。大多数切换最多几次。我同意切换 fbos 应该比切换附件更快,但如果它并不重要,那么你的 API 就可以了。
标签: opengl framebuffer fbo