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

Lu4*_*Lu4 6 opengl

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

问题:

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

Dam*_*mon 5

您可以通过将零纹理附加到同一附加点来分离当前附加的纹理(请参阅规范的第 4.4 章)。

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

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


Mat*_*gro 5

仅使用一个FBO,并为其添加纹理.附加其他纹理时,原始纹理将从FBO中取消附加.

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