1
OpenGL函數只能從OpenGL上下文當前所在的線程調用。此限制是否適用於使用glMapBuffer
/glMapBufferRange
更新數據,即可以映射(緩衝區的一個區域),然後從另一個線程讀取/寫入該區域?當然,假設映射(和解映射)函數是從渲染線程調用的。從另一個線程更新映射的OpenGL緩衝區
OpenGL函數只能從OpenGL上下文當前所在的線程調用。此限制是否適用於使用glMapBuffer
/glMapBufferRange
更新數據,即可以映射(緩衝區的一個區域),然後從另一個線程讀取/寫入該區域?當然,假設映射(和解映射)函數是從渲染線程調用的。從另一個線程更新映射的OpenGL緩衝區
回答的主要問題之前,讓我們討論一些誤傳:
我知道,你應該只調用OpenGL函數中創建OpenGL上下文的線程。
這是不正確的。您只能在上下文最新的線程上調用OpenGL函數。你可以在不同的線程中創建一個OpenGL上下文(這會自動使其在前一個線程中不是最新的,OpenGL上下文只能同時在一個線程中處於最新狀態)。您可以創建多個共享對象的上下文。每個這樣的上下文可以在不同的線程中當前。
現在到了這個問題。是的,你完全可以自由地使用映射的指針,但是你希望從另一個線程。雖然如你所說,你必須使用適當的同步機制讓原始線程知道你已經完成了。
謝謝 - 我已經編輯了這個問題來掩蓋^ H^H^H^H^H^H^H^H來更好地陳述我的假設 – jaymmer