如何从帧缓冲区解除纹理绑定

时间:2011-07-18 18:34:29

标签: opengl

我正在尝试将各种场景渲染为一组纹理,每个场景都有自己的纹理到应该绘制的位置......

问题:

创造多么糟糕的说512 FBO的512个纹理绑定到它们每个。仅使用一个FBO不是更好吗,在这种情况下,我需要解除先前绑定到FBO的纹理,我该怎么做,或者我应该坚持使用512个FBO?

2 个答案:

答案 0 :(得分:5)

仅使用一个FBO,并为其添加纹理。当您附加另一个纹理时,原始纹理将从FBO中取消附加。

此外,您可以将纹理ID 0附加到FBO以从FBO中取消附加当前纹理。

答案 1 :(得分:4)

通过将零纹理附加到相同的附着点来分离当前附着的纹理(参见规范的第4.4章)。

我无法确定分离和重新附加纹理是否会更快或切换帧缓冲对象,因为这取决于实现。
但从概念上讲,附加和分离纹理意味着两倍的库调用和两倍的帧缓冲完整性检查必须在驱动程序中进行,所以我认为使用几个FBO会更快(尽管512是一个令人惊叹的数字!)。

然而,很可能,一个实现可能会以懒惰的方式进行这些检查(在触摸任何附件之后的任何时间,并且恰好在第一个绘制命令发生之前),因此无法确定无法确定。