2012-12-21 36 views

回答

4

如果你小心的話,你應該能夠得到它的工作。請參閱parallel opengl faq

Q: Why does my OpenGL application crash/not work when 
    I am rendering from another thread? 
A: The OpenGL context is thread-specific. You have to 
    make it current in the thread using glXMakeCurrent, 
    wglMakeCurrent or aglSetCurrentContext, depending on 
    your operating system. 
+0

窗口是在單獨的線程中創建的,而上下文是在主線程中創建的,在該線程中將完成繪製。是否有必要使上下文最新? – user1920731

+0

我的猜測是否定的,只要你在一個線程中完成所有的opengl內容。 –

0

你想要做什麼是完全可能的。更好的是,只要像素格式兼容,OpenGL上下文可以在線程之間遷移,甚至可以與多個窗口一起使用。一個約束是,一次只能在一個線程中綁定一個OpenGL上下文,並且只能綁定一個未綁定的上下文。

因此,您甚至可以在一個線程中創建窗口和上下文,然後解除綁定上下文,創建另一個線程並將上下文重新綁定到輔助線程中的窗口。那裏沒問題。

你唯一需要注意的是,OpenGL本身不喜歡多線程。 API本身或多或少是線程安全的,因爲一次只能將一個上下文綁定到線程。但是,如果OpenGL操作在多個線程中產生,則所有簿記都可能觸發令人討厭的驅動程序錯誤,並且也會有一定的性能下降。