在單獨的線程中創建一個窗口會有什麼問題嗎?它將包含消息循環,然後在另一個線程中創建一個OpenGL上下文?Win32消息循環,不同線程中的OpenGL上下文
0
A
回答
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
你想要做什麼是完全可能的。更好的是,只要像素格式兼容,OpenGL上下文可以在線程之間遷移,甚至可以與多個窗口一起使用。一個約束是,一次只能在一個線程中綁定一個OpenGL上下文,並且只能綁定一個未綁定的上下文。
因此,您甚至可以在一個線程中創建窗口和上下文,然後解除綁定上下文,創建另一個線程並將上下文重新綁定到輔助線程中的窗口。那裏沒問題。
你唯一需要注意的是,OpenGL本身不喜歡多線程。 API本身或多或少是線程安全的,因爲一次只能將一個上下文綁定到線程。但是,如果OpenGL操作在多個線程中產生,則所有簿記都可能觸發令人討厭的驅動程序錯誤,並且也會有一定的性能下降。
相關問題
- 1. 多線程Win32 GUI消息循環
- 2. 的Win32消息泵和std ::線程用於創建OpenGL上下文和渲染
- 3. LIFO Win32消息循環?
- 4. MFC消息泵vs Win32消息循環
- 5. postmessage和消息循環在不同的線程
- 6. 鍵盤輸入&Win32消息循環
- 7. 消息循環如何使用線程?
- 8. NoClassDefFoundError的消息與上下文不同
- 9. 帶隱藏窗口的線程的線程消息循環?
- 10. Win32消息程序
- 11. win32應用程序是否有一個消息循環?或者它是每個窗口一個消息循環?
- 12. 在win32上的循環realloc
- 13. 線程「main」中的異常java.lang.RuntimeException:找不到OpenGL上下文
- 14. Opengl遊戲循環多線程
- 15. 窗口程序中的消息循環是否總是「循環」?
- 16. 從後臺線程中抽取可可消息循環
- 17. LibGDX/Socket.io:在當前線程中找不到OpenGL上下文
- 18. 在當前線程中找不到OpenGL上下文
- 19. 將消息發送到不同線程
- 20. 同步循環線程
- 21. .net消息循環
- 22. Erlang消息循環
- 23. Windows消息循環
- 24. iOS:將消息傳遞給for循環中的不同標籤
- 25. 消息框上的不同消息
- 26. 如何終止具有單獨消息循環的線程?
- 27. win32消息循環 - 我應該打破還是返回?
- 28. 這個Win32消息循環究竟發生了什麼?
- 29. 使用sigc和glib的win32應用程序如何實現消息循環
- 30. 通過線程之間的環形(循環)緩衝區發送消息(C中)
窗口是在單獨的線程中創建的,而上下文是在主線程中創建的,在該線程中將完成繪製。是否有必要使上下文最新? – user1920731
我的猜測是否定的,只要你在一個線程中完成所有的opengl內容。 –