2016-06-20 47 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的規則,只要對象被連接或綁定到其他對象,對象將繼續存在。

使用多個上下文時,需要非常仔細地管理對象銷燬。

相關問題