2017-07-16 5 views
1

ほとんどの人が2または3を使用することをお勧めしているようです。それは、3以上の処理能力や何かが(あまりにも多くの処理能力や何かを取り上げるからです。どのようなプログラムで3つ以上のバッファを使用しますか?javaでcreateBufferStrategy()を使用すると、3つ以上のバッファを持つのに役立ちますか?欠点はありますか?

2または3は私のプログラムでうまく動作しますが、私は興味があります。

+0

メモリ - 同じサイズの、それぞれがメモリを占有する 'n'個のバッファを作成しています。例外的に高いフレームレートがある場合は、バッファーを増やすと便利ですが、ほとんどの状況では一般的に2〜3は十分です。 – MadProgrammer

+0

@MilesJohnsonユーザーがあなたの質問に答えた場合は、アンサーを受け入れる:どのように動作しますか?](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work))。未回答のものを指定してください、これはStackOverflowの本当に重要な部分です、ありがとうございます。 – Zabuza

答えて

4

実際には、バッファー戦略の利点を理解すればかなり理解しやすくなります。 3つのケースで何が起こるかを簡単に見てみましょう。あなたがに画像データを書き込むための唯一の表示を持って単一バッファリング


。対照的に、ダブルバッファリングは、2つのディスプレイs、フロントおよびバックバッファを有する。

一般に、アプリケーションのレンダリングと論理プロセスは分割され、並列に実行されます(たとえば、モニタとグラフィックカード)。レンダリングプロセスには、モニタに15msごとに画像を表示するポーリングレートがあるとします。論理プロセスが現在いくつかの画像操作(円を描く)を行っているが、現時点では終了していない(円は半分しか描かれていない)ことを想像してください。 シングルバッファリングでは、レンダリングプロセスで未完成のイメージが表示されるため、画面上に半円が表示されます。

ダブルバッファリングでは論理的なプロセスは、バックバッファに書きますと、それは描画処理を終了している場合にのみ、終了ように、バックバッファをマークします。その後、バックバッファーの内容をフロントバッファーと交換すると、レンダリングプロセスには完成したイメージが表示され、アーティファクトは表示されません。

Illustration of double buffering

のでダブルバッファリング利点は、ユーザーがそうちらつきなどの任意のアーティファクトや経験のものを見ていないということです。 しかし、これは実行時間の増加(スワッピング操作)、特にスペースの増加コスト(画像全体の2倍)を犠牲にしています。 トリプルバッファリングはさらにコスト(3X画像空間)に来るながら


は、今では、プロセスをスピードアップします。ここには、2つのバックバッファフロントバッファがあります。

あなたはダブルバッファリングを使用し、あなただけの描画操作を完了したとして、現在あなたがフロントバッファバックバッファを交換している想像してみてください。これには時間がかかることがあります。一方で、グラフィックカード(非常に速く、バッファを交換するソフトウェアコードよりも速い)は次の描画操作から始めることができますが、がブロックされているため、としてブロックできません。

トリプルバッファリングは常に無料と任意のスワッピングメカニズムに関与していないバックバッファ一つとして、今ちょうど他のバッファへの描画を開始することができ、グラフィックカードを搭載しました。


あなたは以上3バッファ(少なくとも一般的なアプリケーションでは)との緩衝溶液が表示されないのはなぜ今、私たちは物事の仕組みを知っているということも明らかである - それは単にの観点からもメリットがありません一般的な概念。

3D仮想現実物(立体画像)を扱うときにバッファの量が増えると、左チャンネルと右チャンネルのダブルバッファリングがそれぞれのクワッドバッファリングで終了します。

最後の注意点としてVSYNCは引き裂く影響を最小限にするために、モニターの投票率とバックフロントバッファのスワッピングを同期意味。

+2

これは、3つ以上のバッファを持つことが実質的に意味をなさないので、あなたが出力として単一の領域を持っているならば(つまり3Dは存在しない)ということも意味します。 – biziclop

関連する問題