【问题标题】:Re-create FBO (frame buffer object) each frame每帧重新创建 FBO(帧缓冲区对象)
【发布时间】:2017-06-14 10:04:33
【问题描述】:

我想创建 FBO,但这将在所有上下文之间“共享”。 因为 FBO 是容器,不能“共享”,而只能是它的缓冲区,所以我想这样做:

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

  2. 每个 帧中,在任何处于活动状态的上下文中,我都会创建 FBO(因此它可用于当前上下文),将缓冲区附加到它,然后删除 FBO渲染后的容器。

这样,我就有了一个可用于任何上下文的所需 FBO。

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

可以吗?

【问题讨论】:

    标签: opengl framebuffer fbo


    【解决方案1】:

    从某种意义上说,这将起作用。但这绝不是。实际上,您提出的任何导致“每帧创建一个 OpenGL 对象”的解决方案都应该立即丢弃。或者至少被认为是高度可疑的。

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

    如果您想跨上下文传播对帧缓冲区的更改,那么您应该以仅在需要时修改或重新创建 FBO 的方式进行。也就是说,当它们实际发生变化时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多