2010-12-08 203 views
14

我想在一个线程中呈现我的场景,然后在另一个线程拥有的窗口中blit结果。为避免将framebuffer读回到cpu内存,我想使用framebuffer对象。到目前为止,我还没有能够得到这个工作(白色纹理),这让我相信这不被opengl支持。是否可以在上下文/线程之间共享一个opengl framebuffer对象?

  1. 是否有可能在不同的上下文之间共享framebuffer对象?
  2. 假如对象一次只绑定一个线程,是否可以在不同的线程之间共享帧缓冲区对象?

如果有人能指出我在文档中描述的位置,那将是一种奖励。

+0

赏金将授予任何人的工作示例代码 - 死或活:)或至少一步一步指导如何设置FBO共享,或实现它使用共享纹理和渲染缓冲区。 – Suma 2011-05-31 08:57:50

+0

@Suma共享纹理是平台特定的。在Windows中,它使用wglShareLists()完成,它需要在生成使用glFramebufferTexture()附加到FBO的纹理之前调用。我的理解是,即使您的OpenGL实现/版本不允许您直接共享FBO,也应该能够从其他上下文中使用此纹理。 – Plow 2011-05-31 12:04:03

回答

9

不可能在不同的上下文之间共享帧缓冲区。请参阅附录D OpenGL 3.3规范的第一段。不过,你可以共享纹理和渲染缓冲区,这应该让你想要你的需要。

至于线程:它应该是可能的,但通常建议不要从多线程发出GL命令(因为它很难同步)。通常,您会将内容复制到像素缓冲区对象,然后将其映射到GL线程,然后使用来自其他线程的映射指针。

相关问题