149

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

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

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

4

2 に答える 2

219

Framebufferオブジェクトは実際にはバッファーではなく、1 つ以上の添付ファイルを含むアグリゲーター オブジェクトであり、実際のバッファーです。Framebufferは、すべてのメンバーがバッファーへのポインターである C 構造体として理解できます。アタッチメントがない場合、Framebufferオブジェクトのフットプリントは非常に小さくなります。

Framebufferにアタッチされた各バッファは、 Renderbufferまたはtextureにすることができます。

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

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

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

于 2012-11-18T18:29:15.433 に答える
64

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

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

一方:

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

于 2010-02-06T12:33:20.643 に答える