2017-06-14 130 views
0

我想创建FBO,但这将在所有上下文之间“共享”。 因为一个FBO是容器,不能“共享”,但只有其缓冲区,我认为做如下:每帧重新创建FBO(帧缓冲对象)

  1. 创建一个对象FBODescriptor是所需的FBO的描述符,它也包含了OpenGL的共享的缓冲区。

  2. 每个帧,并且在处于活动状态的任何情况下,我创建FBO(因此它是可用于目前的上下文中),附连到它的缓冲器,和渲染后删除FBO容器。

以这种方式,我有一个所需的FBO可用于任何上下文。

我的假设是,因为资源缓冲区是存在的,不需要重新创建它们的每一帧,但只有FBO容器,它没有一个有意义的惩罚。

它可以工作吗?

回答

0

这将起作用,因为它会起作用。但它不以任何方式。事实上,你提出的任何解决方案都会导致“每帧创建一个OpenGL对象”,应该立即废弃。或者至少被认为是高度可疑的。

FBO通常会对其状态进行大量验证。这不是便宜。事实上,这个建议通常是在完成这些建议后根本不要修改FBO。不要附加新的图像,不要删除它们,任何东西。这显然包括删除和重新创建它们。

如果您想要通过上下文传播对帧缓冲区的更改,那么您应该以仅在需要需要时修改或重新创建FBO的方式进行。也就是说,他们真的改变了。

相关问题