2016-06-20 31 views
0

我有几个opengl上下文,它们是直接在程序开始时从mainthread创建的。那时他们也会与wglShareLists(contextItem.hglrc,hglrc)共享;命令。我也有很多线程,每个线程都获得一个上下文,其中wglMakeCurrent(hdc,m_vUsingContexts [i] .hglrc)为;命令。从不同但共享的上下文中删除framebufferobject

现在我只是想知道,如果我有线程1链接到CONTEXT1线程2链接到上下文2两者共享。是否有可能,线程1创建帧缓冲区对象和线程2删除此帧缓冲区对象? (是还是不够)

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

我也可以用vertexbufferobjects和纹理做同样的事吗?

回答

2

帧缓冲区对象是container objects,因此跨上下文不是shared。所以不,你可能不会自己删除FBO。事实上,你不能通过上下文以任何方式访问它们,因为它们不共享。

但是,Texture和Renderbuffer对象可以跨上下文共享。所以你可以在另一个上下文中删除它们。当然,这不一定会释放内存。根据OpenGL's context model的规则,只要对象被连接或绑定到其他对象,对象将继续存在。

使用多个上下文时,需要非常仔细地管理对象销毁。

相关问题