是否可以在上下文/线程之间共享一个opengl帧缓冲对象?

Plo*_*low 14 windows opengl multithreading framebuffer openglcontext

我想在一个线程中渲染我的场景,然后在另一个线程拥有的窗口中将结果blit.为了避免将帧缓冲区读回到cpu内存,我想使用framebuffer对象.到目前为止,我还没有能够使这个工作(白色纹理),这让我相信opengl不支持这个.

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

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

ltj*_*jax 9

不可能在不同的上下文之间共享帧缓冲区.请参阅附录D的第一段,OpenGL 3.3规范.但是,您可以共享纹理和渲染缓冲区,这应该可以满足您的需要.

至于线程:它应该是可能的,但通常建议不要从多个线程发出GL命令(因为它很难同步).通常,您将内容复制到pixel-buffer-object并从GL线程映射它,然后使用来自另一个线程的映射指针.

  • Ragarding多线程:虽然不应该混淆来自多个线程的渲染调用,但是应该注意,渲染上下文可以很好地在线程之间迁移.任何单一的渲染上下文可能是活跃在同一时间只有一个线程,但你可以非常清楚脱离上下文(MakeCurrent(NULL)),并在另一个线程重新接通之后. (5认同)
  • 似乎FBO共享与不同的OGL版本不同.参看 http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=270430&page=2("如果您使用的是GL 2.1和EXT_fbo,则共享FBO ID ....如果您使用的是GL 3.0 (转发),...不共享FBO ID.") (4认同)