「表示」キャンバスと「プレビュー」キャンバスの2 つの es を含む wxPython を使用して作成された GUI があり、そのGLCanvas
上に PyOpenGL を使用して非常に単純なジオメトリを描画しています。「プレビュー」キャンバスと「表示」キャンバスは、同じフレームバッファの内容を表示します:
これらのキャンバスの両方を、テアリングなしで一貫したフレームレートで同期的に更新する必要があります。
今まで電話してただけ
self.SetCurrent()
# draw stuff...
self.SwapBuffers()
レンダリング ループ内のプレビュー キャンバスと表示キャンバスの両方に対して。ドライバー設定で vsync を無効にすると、これはかなりうまく機能します。
ただし、vsync を有効にすると、フレームレートが 30Hz まで低下し、ディスプレイの垂直リフレッシュ レートの半分になります。おそらくこれは、レンダリング ループの実行がSwapBuffers()
次の垂直方向の更新を待つ各呼び出しで停止するためです。2 つのSwapBuffers()
呼び出しのいずれかをコメント アウトすると、フレームレートが 60 Hz に戻りますが、もちろんキャンバスの 1 つだけが更新されます。 .
私が本当に望んでいるのは、両方のキャンバスが vsync 間隔ごとに 1 回、同期的に更新されることです。wx.glcanvas.GLCanvas
クラスを使用してこれを達成する方法はありますか?