私の OpenGL アプリケーションでは、明らかな理由で画面のティアリングを防止したいと考えています。これまでは vsync を使用していました。しかし、パフォーマンスを向上させるために、ページ フリッピング バッファー スワップ (値を変更する代わりにモニターのデータへのポインターを変更する) に置き換えたいと考えています。私の質問は次のとおりです。重要なウィンドウ システム (Windows、Cocoa、X11) は、この種のバッファー スワップをサポートしていますか? また、明示的に要求する必要がありますか、それともデフォルトの動作ですか?
1 に答える
V-Sync は「垂直帰線同期」です。V-Sync が有効になっている場合は、ディスプレイが描画されていないときに、そのタイムスパンでダブル バッファが交換されることを意味します。これは、電子ビームを使用して画像を左上から下に 1 行ずつ描画する CRT ディスプレイの時代から継承された用語です。ビームが右下に到達したら、右上に戻さなければなりませんでした。電子ビームは、2 組の電磁石コイルを使用して操縦され、(オシロスコープの静電偏向器とは異なり) 特定のスルーレートを超えて動作することはできません。それがV-Syncです。
現在、ディスプレイはデータを 1 行ずつディスプレイ内部のバッファに受信します。フレーム全体の最後に、短い一時停止が挿入されます。
したがって、「垂直帰線」は、描画プロセスに干渉することなく、表示フレームバッファ内のデータを更新できる期間です。
これまでは vsync を使用していました。
いいえ、vsync を「使用」していません。V-Sync によって交換が同期されるダブル バッファリングを使用します。
しかし、ページフリッピングバッファスワップに置き換えたい
これはあなたが決めることではありません。使用される方法は、グラフィックス ハードウェアとそのドライバーによって選択されます。あなたのプログラムはユーザー空間に存在し、その低レベルでハードウェアと話すことさえできません。そして通常、その状況で最も効果的な方法が使用されます。