从不同但共享的上下文

时间:2016-06-20 09:42:36

标签: multithreading opengl

我有一些opengl上下文,它们是在程序开头直接从mainthread创建的。那时他们也会与 wglShareLists(contextItem.hglrc,hglrc); 命令共享。我也有很多线程,每个线程都使用 wglMakeCurrent(hdc,m_vUsingContexts [i] .hglrc); 命令获得一个上下文。

现在我只想知道,如果我有 thread1 链接到 context1 thread2 链接到 context2 ,两者都是共享的。是否有可能 thread1 创建一个framebufferobject并且 thread2 删除此framebufferobject? (是或否是足够的)

我知道这绝对是愚蠢的事。通常创建某些东西的线程也应该删除 他自己的东西。但是我无法改变它,因为它是一个directx 11程序,我只为它编写openGL驱动程序。在directx 11中,创建或删除哪个线程并不重要。

我是否也可以对vertexbufferobjects和纹理做同样的事情?

1 个答案:

答案 0 :(得分:2)

Framebuffer对象为container objects,因此在上下文中不是shared。所以不,你可能不会自己删除FBO。实际上,您无法以任何方式跨上下文访问它们,因为它们不是共享的。

但是,Texture和Renderbuffer对象可以跨上下文共享。所以你可以在另一个上下文中删除它们。当然,这不一定会释放记忆。根据{{​​3}}的规则,只要对象被附加或绑定到其他东西,它们将继续存在。

使用多个上下文时,需要非常小心地管理对象破坏。