私はlibx11でマルチスレッドのOpenGLアプリケーションを作成しようとしています。ウィンドウごとに1つのスレッドと1つのマネージャスレッドがあります。マルチスレッドX11アプリケーションとOpenGL
私はマネージャーのスレッドでイベントループを持っている:
while(true)
while(XQLength(mPlatformData->display)){
XNextEvent(mPlatformData->display, &event);
std::cout << "event" << std::endl;
}
}
これは、シングルスレッドのアプリケーションのための素晴らしいイベントループですが、このマルチスレッドの設定で奇妙なことが起こります。
ウィンドウを作成しているときに、イベントキューを無効にするか、GLXMakeCurrentがハングしてスレッド全体が停止して何もしません。
マルチスレッドのX11アプリケーションに関する情報がネット上で見つからないため、イベントを別の方法で処理する必要がありますか?
X11とOpenGLはスレッドが安全ではないと思います。 –
GLは1つのコンテキスト/スレッドを使用するとスレッドセーフです。 X11のドキュメントによれば、XInitThreads()を最初に呼び出すと安全です。 – Dutow