web-dev-qa-db-ja.com

フレームバッファオブジェクト、レンダーバッファオブジェクト、テクスチャの違いは?

フレームバッファオブジェクト、レンダーバッファオブジェクト、テクスチャの違いは何ですか?それらはどのような状況で使用されますか?

29
Megharaj

フレームバッファオブジェクトは、多かれ少なかれ単なる管理構造です。カラーバッファ、デプスバッファ、ステンシルバッファなど、すべてのサブバッファとともに完全なフレームバッファを全体として管理します。

テクスチャまたはレンダーバッファは、個々のサブバッファの実際のストレージを構成します。このようにして、複数のカラーバッファー、深度バッファー、およびステンシルバッファーを、すべて異なるテクスチャ/レンダーバッファーに格納することができます。ただし、これらはすべて一緒になって、レンダリングする単一の論理フレームバッファーを構成します。

したがって、フレームバッファに書き込まれる最後のフラグメント(ピクセルと呼ぶこともありますが、実際にはまだ1つではありません)には、1つ以上のカラー値、深度値、およびステンシル値があり、それらはすべてフレームバッファの異なるサブバッファに格納されます。 。

19
Christian Rau

フレームバッファ

フレームバッファは実際にはバッファではありません。これは、描画操作のパラメーターを定義するオブジェクトの抽象化です。これは、1つ以上の添付ファイルを保持する小さなオブジェクトであり、それ自体が実際のバッファーです。フレームバッファを、多くのフィールドを持つC構造体として理解します。各フィールド(OpenGL用語では各attachment)は、レンダーバッファー、テクスチャ、深度バッファーなどへのポインターにすることができます。

テクスチャ

標準ピクセルの配列。これは実際のバッファーであり、描画されるピクセルの宛先としてフレームバッファーにアタッチできます。テクスチャの各ピクセルには通常、色成分とアルファ値が含まれています(テクスチャのピクセルは、4つのフロートを持つRGBAクワッドとの間で変換できます)。

テクスチャがアタッチされているフレームバッファに描画した後、テクスチャからピクセルを読み取って、別の描画操作で使用することができます。これにより、たとえば、マルチパス描画や別のシーン内のシーンの描画が可能になります。

テクスチャをシェーダープログラムにアタッチして、サンプラーとして使用できます。

Renderbuffer

ネイティブピクセルの配列。レンダーバッファはテクスチャと同じですが、内部形式を使用してピクセルを格納します。 ピクセル転送 操作用に最適化されています。描画されるピクセルの宛先としてフレームバッファーにアタッチし、ビューポートまたは別のフレームバッファーにすばやくコピーできます。これにより、 double buffer アルゴリズムの実装が可能になり、前のシーンが表示されている間に次のシーンが描画されます。

レンダーバッファを使用して、単一の描画手順にのみ使用される深度とステンシルの情報を格納することもできます。これが可能なのは、実装自体だけがレンダーバッファデータを読み取る必要があり、ネイティブ形式を使用しているため、テクスチャよりも高速になる傾向があるためです。

これはネイティブ形式を使用するため、renderbufferはシェーダープログラムにアタッチしてサンプラーとして使用することはできません

24
fernacolo