0

別のスレッドでウィンドウを作成し、メッセージループも含まれるようにしてから、別のスレッドでOpenGLコンテキストを作成することに何か問題がありますか?

4

2 に答える 2

4

注意すれば、それを機能させることができるはずです。並列openglのよくある質問を参照してください。

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.
于 2012-12-21T06:08:24.927 に答える
0

あなたがしたいことは完全に可能です。さらに良いことに、OpenGLコンテキストはスレッド間で移行でき、ピクセル形式に互換性がある限り、複数のウィンドウで使用することもできます。1つの制約は、OpenGLコンテキストは一度に1つのスレッドにのみバインドでき、バインドされていないコンテキストのみをバインドできることです。

したがって、1つのスレッドでウィンドウとコンテキストを作成してから、コンテキストのバインドを解除し、別のスレッドを作成して、セカンダリスレッドのウィンドウにコンテキストを再バインドすることもできます。問題ありません。

注意しなければならない唯一のことは、OpenGL自体がマルチスレッド化されることを好まないということです。一度に1つのコンテキストのみをスレッドにバインドできるため、API自体は多かれ少なかれスレッドセーフです。ただし、OpenGL操作が複数のスレッドで発生する場合に必要なすべての簿記は、厄介なドライバーのバグを引き起こす可能性があり、パフォーマンスに一定の影響を与える可能性があります。

于 2012-12-21T11:26:47.950 に答える