我曾經試圖從一個子線程打開過剩窗口,並得到了很多討厭的問題。我記得lists.apple.com上的這篇文章:如何在OS X的主線程中使用GLUT?
GLUT functions may only be called from the application's main thread
在Mac OS X上,GLUT在這方面有什麼變化嗎?是否有線程安全的GLUT,讓你從任何線程打開窗口?
如果GLUT不是一個選項,有替換過剩和會從任何線程工作的一個小庫?
[編輯]
這裏是建議作爲答案通過各種解決方案觸發我的測試結果:
- GLFW看上去不錯,但沒有編譯(當前分支是3歲)
- Agar是另一個僞裝者,但它對於我的微小需求來說太大了
- SDL不是BSD許可證兼容的,它是適合單個文件的大型代碼庫
- GLUT無法在任何線程中運行。
我決定重新發明輪子(是的,有時候這很好),最後一堂課只有200行代碼。它讓我從任何線程打開和關閉一個窗口(openGL在新線程中繪製),並且我可以完全控制垂直同步等等(SDL對於OpenGL使用double buffering = slow)。我不得不欺騙NSApp
以正確啓動和停止應用程序(否則不使用事件循環)。
對那些跟我說的OpenGL不是線程安全的,這是不完全正確:你可以同時運行多個線程的OpenGL和繪圖命令將分配給該線程OpenGL的狀態下執行。 OpenGL是線程專用。
如果有人需要一些裸機代碼使用可可創建的OpenGL窗口:gl_window.mm
所有的代碼必須在Mac,Windows和Linux上運行。如果那裏有一名水管工,可以避免重寫一個過剩的水平,那會很好。 – gaspard 2010-01-29 20:12:21
http://www.opengl3.org/resources/libraries/windowtoolkits/ – pestilence669 2010-01-29 20:32:39