Windowsアプリケーションで、複数のOpenGLウィンドウを同時に開いています。理想的には、これらのそれぞれを60 fpsで描画し、画面の更新に同期させたいと思います。
レンダリングコンテキストごとwglSwapIntervalEXT(1)
に、vsyncをオンにするように呼び出しています。各ウィンドウには独自の表示スレッドがあり、フレームを描画してSwapBuffers
から更新を呼び出します。
ウィンドウが互いに「競合」していることがわかります。SwapBuffers
呼び出しは同期されており、別々のスレッドにある場合でも、互いに待機しているように見えます。各ウィンドウのフレーム間時間を測定しています。ウィンドウが2つある場合、これは30 fpsに低下し、3〜20fpsなどになります。
でvsyncをオフにするとwglSwapIntervalEXT(0)
、開いているウィンドウの数に関係なく、60fpsで正常に更新されます。ただし、1つのウィンドウを開いている場合、これはvsyncをオンにした場合ほどスムーズではありません。
OpenGLで私が望むことを達成する方法はありますか?