18

XWindow Drawable、Pixmap、および XRender を使用して画面に何かを描画しています。時々ちらつきがあることがわかります。VBLANK を待つ方法はありますか? 私はすでにたくさんのグーグルで、森の中でコインを探しているような気がします.

関係する OpenGL はありません。Linux(Ubuntu)です。(nano)sleep() を使用することもできますが、いつ描画するかを知る必要があります。

4

1 に答える 1

7

同期とダブルバッファリングに対する優れた高レベルのインターフェイスがあるため、GLXを使用するのが最も簡単なソリューションであることがわかりました。GLX は OpenGL ではなく、X 拡張であることに注意してください。SwapBuffersが(何らかの奇妙な理由で)それを要求するため、ダミーのOpenGLコンテキストが必要ですが、それだけです。

なんらかの理由で GLX を使用せずに実行したい場合は、X Double Buffer Extension (DBE) を使用してダブル バッファーを作成し、X Syncronization Extension を使用して手動でディスプレイに同期することで実行できます。私自身はそうしたことはありませんが、XSyncListSystemCounters を呼び出して好みのものを見つけることができるはずです (適切な初期化の後!):

XSyncListSystemCounters は、ディスプレイがサポートするシステム カウンターの配列へのポインターを返します。

ただし、難しい方法については、自分自身でこれ以上見つけることはできません。幸運を。

于 2016-07-27T12:46:08.710 に答える