1

PBO を介してビデオをレンダリングする 2 つの OpenGL ウィンドウを作成しました。私が理解できないのは、2番目のウィンドウまたは2番目にレンダリングされるウィンドウが常に最初のウィンドウよりもずっと長くかかるのはなぜですか? nVidia Quadro 製品でしか確認していないため、これはベンダー固有である可能性があることを認識しています。

擬似コード:

pixels[]

for (num_windows)
{
  gettimeofday(t0)
  window.display(pixels)
  gettimeofday(t1)
  delta = t1 - t0
}

通常、最初のウィンドウのデルタは 5 ミリ秒未満であり、ほとんどの場合、2 番目のウィンドウのデルタは 10 ミリ秒を超えています。どうしてこれなの?

4

1 に答える 1

2

これは、CPU と GPU が非同期であり、バッファ スワップ中にブロックが発生したり、コマンド キューがいっぱいになったりする可能性があるため、何かのレンダリングにかかる​​時間を測定するための適切な方法ではありません。新しい OpenGL 実装を使用している場合は、Timer Queries.

これらの各ウィンドウの実装display (...)とその違いを確認せずに、VSYNC のようなものが原因であると推測することしかできません (特に、言及した 2 つの時間が 60 Hz に非常に近い場合)。VSYNC を有効にしてバッファを交換すると、適切な時期まで呼び出しスレッドがブロックされます。2 回目は VSYNC 間隔の開始時にすぐに開始されるため、2 回目よりも最初にこれを実行する方が待ち時間が短くなる可能性があります。

ブロックに費やされた時間が完全に無駄にならないように、あるウィンドウと別のウィンドウへの描画の間に CPU で何か役に立つことをしたい場合があります。または、1 つのスレッドが各ウィンドウのバッファー スワップを駆動する、マルチスレッド レンダリングの使用を検討することもできます。これは、マルチスレッド レンダリングが本当に理にかなっている 1 つのケースです。

于 2013-09-05T18:27:37.830 に答える