1

「表示」キャンバスと「プレビュー」キャンバスの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クラスを使用してこれを達成する方法はありますか?

4

1 に答える 1

0

Andon が彼のコメントで暗示したのは、{wgl|glX}SwapInterval を使用して最初のスワップ間隔を設定し、SwapBuffers を 1 に同期し、SwapBuffers の同期が戻った直後にスワップ間隔を 0 に設定し、他の SwapBuffers を実行することです。 .

于 2013-09-11T22:15:37.130 に答える