OpenGLのフレームバッファーとレンダーバッファーの概念と違いは何ですか?


136

フレームバッファーとレンダーバッファーの概念について混乱しています。レンダリングする必要があることは知っていますが、使用する前に理解したいと思います。

一時的な描画結果を保存するために、ビットマップバッファーが必要であることを知っています。バックバッファー。そして、それらの描画が進行中は、他のバッファが画面に表示される必要があります。フロントバッファ。そして、それらをめくって、もう一度描きます。私はこの概念を知っていますが、それらのオブジェクトをこの概念に関連付けるのは困難です。

それらの概念と違いは何ですか?


7
レンダーバッファーは、フレームバッファーのチャンネルのようなコンポーネント(色、ステンシル、深度など)です。参照:developer.apple.com/iphone/library/documentation/3DDrawing/...
eonil

2
リンクはiPhone固有ですが、フレームバッファーは十分に説明されています。
j00hi 2011年

回答:


62

このページには、違いを非常にうまく説明していると思う詳細がいくつかあります。まず:

OpenGLパイプラインの最終的なレンダリング先は、[the] framebufferと呼ばれます。

一方:

Renderbufferオブジェクト
さらに、renderbufferオブジェクトがオフスクリーンレンダリング用に新しく導入されました。テクスチャオブジェクトにレンダリングする代わりに、レンダーバッファオブジェクトにシーンを直接レンダリングできます。Renderbufferは、レンダリング可能な内部形式の単一のイメージを含むデータストレージオブジェクトです。ステンシルやデプスバッファーなど、対応するテクスチャ形式を持たないOpenGL論理バッファーを格納するために使用されます。


196

フレームバッファオブジェクトは、実際には、バッファが、自分の順番によって、実際のバッファである1つまたは複数の添付ファイルを、含まれているアグリゲータオブジェクトではありません。フレームバッファは、すべてのメンバーがバッファへのポインタであるC構造として理解できます。アタッチメントがない場合、Framebufferオブジェクトのフットプリントは非常に低くなります。

今すぐに接続された各バッファフレームバッファをすることができレンダ質感

レンダバッファは、実際のバッファ(バイト、又は整数、又は画素のアレイ)です。レンダは、それがオフスクリーンレンダリング用に最適化されていますので、ネイティブ形式でピクセル値を格納します。つまり、レンダーバッファへの描画は、テクスチャへの描画よりもはるかに高速です。欠点は、ピクセルがネイティブな実装依存のフォーマットを使用するため、レンダーバッファーからの読み取りがテクスチャからの読み取りよりもはるかに難しいことです。それでも、Renderbufferがペイントされると、ピクセル転送操作を使用して、そのコンテンツを画面(またはおそらく他のRenderbuffer)に直接コピーできます。これは、レンダーバッファが あなたが言及したダブルバッファパターンを効率的に実装するために使用することができます。

レンダーバッファは比較的新しい概念です。以前は、フレームバッファーを使用してテクスチャーにレンダリングしていましたが、テクスチャーが標準形式を使用しているため、速度が遅くなる可能性があります。テクスチャにレンダリングすることも可能であり、シーンを構築するために、または別のシーンの表面にシーンを描画するために、各ピクセルに対して複数のパスを実行する必要がある場合に非常に役立ちます。

OpenGL wikiには詳細とリンクを示すこのページがあります。


13
ありがとう!構造体やポインタのようなものとしてそれを説明することは、私にははるかに理にかなっています。
DouglasHeriot 2013年

2
これはまだ少し混乱しています。renderbufferが別のレンダーバッファーへのクイックコピーのみを許可する場合、その使用はほとんどありません!後処理段階(SSAOなど)を行う必要がある場合、以前にテクスチャにレンダリングしてからそれをデフォルトのフレームバッファーにレンダリングする方が、RenderBufferにレンダリングしてから画面にコピーするよりも簡単ではありませんか?
CoffeDeveloper 2015年

4
レンダーバッファーは、カスタム後処理用に設計されていません。これらを使用して、描画手順の深度とステンシル情報を保存できます。これが可能なのは、GPL実装自体だけがレンダーバッファーデータを読み取る必要があり、ネイティブフォーマットを使用するため、テクスチャよりも高速になる傾向があるためです。後処理が必要な場合は、テクスチャを使用してください。
fernacolo 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.