私はかつてサブスレッドからGLUTウィンドウを開こうとしましたが、多くの厄介な問題が発生しました。私はlists.apple.comのこの投稿を覚えています:
GLUT functions may only be called from the application's main thread
Mac OS XのGLUTに関して、この点に関して何か変更はありますか?任意のスレッドからウィンドウを開くことができるスレッドセーフなGLUTはありますか?
GLUTがオプションでない場合、GLUTを置き換え、どのスレッドからでも機能する小さなライブラリはありますか?
[編集]
回答として提案されたさまざまなソリューションによってトリガーされた私のテストの結果は次のとおりです。
- GLFWは見栄えが良かったのですが、コンパイルされませんでした(現在のブランチは3年前のものです)
- 寒天は別のふりをしていましたが、私が持っていた小さなニーズには大きすぎます
- SDLはBSDライセンスと互換性がなく、単一のファイルに収まるコード用の巨大なライブラリです。
- GLUTはどのスレッドでも実行できません。
私は車輪の再発明をすることにしました(そう、それは時々良いことです)そして最終的なクラスはたった200行のコードです。任意のスレッドからウィンドウを開いたり閉じたり(新しいスレッドでopenGLを描画)、垂直同期などを完全に制御できます(SDLはダブルバッファリングを使用します= openGLでは低速です)。アプリケーションを適切に開始および停止するために、をだまして回避するNSApp
必要がありました(それ以外の場合はイベントループを使用しません)。
OpenGLはスレッドセーフではないと私に言っている人にとっては、それは正確には真実ではありません。複数のOpenGLスレッドを実行でき、描画コマンドはそのスレッドに割り当てられたOpenGL状態で実行されます。OpenGLはスレッド固有です。
Cocoaを使用してOpenGLウィンドウを作成するための最低限のコードが必要な場合:gl_window.mm