2016-07-21 4 views
1

GPUにレンダリングする複数のバックバッファがあるとします。グラフィックス - 複数のバッファリング:キューに入れられたか、最後に完了しましたか?

タイムライン:フロントバッファに

  1. フレーム0
  2. 画面のリフレッシュ - 画面上のフレーム0
  3. ランゲームループ、すべての
  4. GPUに、フレーム1のためのコマンドをレンダリング実行ゲームを提出ループ、フレーム2のすべてのレンダリングコマンドをGPUに送信
  5. GPUはフレーム1のすべてのコマンドを処理し、フレーム1をバックバッファ1にレンダリングします
  6. GPUはフレーム2のすべてのコマンドを処理し、フレーム2をバックにレンダリングします。 バッファ2
  7. フレームのリフレッシュ - フレーム?画面上

思考:GPUで

  • がVSYNCを待たないように言われ、私は図5(b)および図6(b)GPUのコピーがあります推測しています直前に完了したバックバッファをフロントバッファに挿入します。この場合、フレーム2が表示されます。
  • GPUがVSYNCを待機するように指示された場合、GPUは完了後にバッファをスワップしません。しかし、時間にバッファを交換すると、どのバッファを選択するのか分かりません。

可能であれば、私はドキュメントを見るのが好きです。私は、セマンティクスがどのレベルで定義されているか分かりません。

答えて

1

セマンティクスは定義されていません。少なくとも、OpenGLではなく、wgl/glX_EXT_swap_controlでさえ。スワップ間隔では、スワップがvsyncを待つかどうかを決定できますが、vsync間で複数回スワップすると、どのイメージが表示されるかは実装によって定義されます。

wgl/glX_EXT_swap_control_tearはあなたがバッファをスワップに遅れている場合は、引き裂く行動をすることを指定することができます。しかし、早ければ何が起こるのかは明記されていません。

バルカンは、その現在のモードを介して機能を「スワッピング」の異なる種類の実装を可能にします。唯一必要なプレゼンテーションモードであるFIFOは、提示した各イメージが表示された順序で提示されることを意味します。つまり、次のイメージを「スワップ」(Vulkanの言葉で、取得)しようとすると、両方が表示されるのを待っていると、GPUがストールします。

"swap_control_tear"を反映するモードと、あなたの場合に便利なモードがあります。バッファを表示するよりも速く描画しようとすると、待機中のもの次のイメージのために破棄されます。

関連する問題