フレーム バッファ オブジェクト、レンダー バッファ オブジェクト、テクスチャの違いは何ですか? それらはどのような文脈で使用されますか?
2 に答える
フレームバッファ
フレームバッファは実際にはバッファではありません。これは、描画操作のパラメーターを定義するオブジェクトの抽象化です。それ自体が実際のバッファーである1 つ以上の添付ファイルを保持する小さなオブジェクトです。多くのフィールドを持つ C 構造体としてのフレーム バッファーを理解します。各フィールド (OpenGL 用語の各アタッチメント) は、レンダー バッファー、テクスチャ、深度バッファーなどへのポインターにすることができます。
テクスチャ
標準ピクセルの配列。これは実際のバッファであり、描画されるピクセルの宛先としてフレームバッファにアタッチできます。テクスチャ内の各ピクセルには通常、カラー コンポーネントとアルファ値が含まれます (テクスチャ内のピクセルは、4 つの float を持つ RGBA クワッドとの間で変換できます)。
アタッチされたテクスチャを含むフレーム バッファに描画した後、テクスチャからピクセルを読み取って、別の描画操作で使用することができます。これにより、たとえば、マルチパス描画や別のシーン内のシーンの描画が可能になります。
テクスチャをシェーダー プログラムにアタッチして、サンプラーとして使用できます。
レンダーバッファ
ネイティブ ピクセルの配列。renderbuffer はテクスチャに似ていますが、内部形式を使用してピクセルを格納します。ピクセル転送操作用に最適化されています。描画されるピクセルの宛先としてフレームバッファにアタッチし、ビューポートまたは別のフレームバッファにすばやくコピーできます。これにより、前のシーンが表示されている間に次のシーンが描画される、ダブル バッファアルゴリズムの実装が可能になります。
レンダーバッファーは、1 回の描画手順でのみ使用される深度とステンシルの情報を格納するためにも使用できます。これが可能になるのは、実装自体のみがレンダー バッファー データを読み取る必要があり、ネイティブ フォーマットを使用するため、テクスチャよりも高速になる傾向があるためです。
これはネイティブ形式を使用するため、レンダーバッファーをシェーダー プログラムにアタッチしてサンプラーとして使用することはできません。
フレームバッファ オブジェクトは、多かれ少なかれ単なる管理構造です。カラー バッファ、深度バッファ、ステンシル バッファなど、すべてのサブバッファを含む完全なフレームバッファを全体として管理します。
テクスチャまたはレンダバッファは、個々のサブバッファの実際のストレージを構成します。このようにして、複数のカラー バッファー、深度バッファー、ステンシル バッファーをすべて異なるテクスチャ/レンダー バッファーに格納できます。しかし、それらはすべて一緒になって、レンダリング先の単一の論理フレームバッファーを構成します。
したがって、フレーム バッファに書き込まれる最終フラグメント (ピクセルと呼ぶこともできますが、実際にはまだ 1 ではありません) には、1 つ以上の色値、深度値、およびステンシル値があり、それらはすべてフレーム バッファの異なるサブバッファに配置されます。 .