web-dev-qa-db-ja.com

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

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

一時的な描画結果を保存するには、ビットマップバッファが必要であることを知っています。バックバッファ。そして、他のバッファは、それらの図面が進行中のときに画面に表示される必要があります。フロントバッファ。そして、それらを反転し、再び描画します。私はこの概念を知っていますが、これらのオブジェクトをこの概念に接続するのは難しいです。

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

122
Eonil

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

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

一方、

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

58
ChrisF

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

これで、各バッファーが フレームバッファ することができます レンダーバッファー または テクスチャー

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

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

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

173
fernacolo