3

OpenGL アプリには、ステンシルと深度バッファーの両方が必要です。デファード シェーディングやその他の後処理効果を実行できるように、デプス バッファーは少なくともフレーム バッファー オブジェクトを介してテクスチャにレンダリングする必要があります。私はすでにこのフレームバッファをセットアップしています (GL_DEPTH24_STENCIL8 を使用) が、いくつかの懸念と質問があります。

まず、32 ビットの浮動小数点深度バッファーを使用したいと思います。GL_DEPTH32F_STENCIL8 オプションが最も明白なようです。私が知りたいのは、この形式の実際のメモリ フットプリントはどれくらいかということです。論理的には 40 ビットになりますが、アラインメントについて私が何をしているかを知っていれば、64 にパディングされても驚かないでしょう。ぜひ知りたいです。

おそらく、深度バッファとステンシル バッファを別々にしておく方がよいでしょうか? これがサポートされていないことを心配する必要がありますか? ステンシル テストとデプス テストは一緒に実行されることが多いため、キャッシュの効率はどうですか?

PS。マルチサンプリングは使用していません。

4

1 に答える 1

5

GL_DEPTH32F_STENCIL864 ビット形式です。深さは 32 ビット、ステンシルは 8 ビット、アライメントは 24 ビットです。

これは D3D10 に追加されたのと同じ形式であるため、両方のデスクトップ グラフィックス API を知っていると便利な場合があります。D3D を使用すると、名前を見るだけでそのフォーマットのサイズを簡単に把握できます。

D3D では、形式は次のように知られていDXGI_FORMAT_D32_FLOAT_S8X24_UINTます。

   D32_FLOAT32 ビット深度 (浮動小数点) を格納することを示します

   S8X24_UINT8 ビットのステンシル + 24 ビットの未使用 (符号なし整数) を格納することを示します。

D3D は、パディングの目的で未使用のビットがある場合にフォーマットが明示的に通知するという点で優れています (これはXnフォーマットで示されます)。RGBD3D にはカラー レンダリング可能な 8 ビット フォーマットはありません。RGBXこれらは、32 ビット ピクセルを生成するための 4 のすべてまたは一部の順列です。


正式な回答を得るために、この形式を最初に GL に追加した拡張機能を紹介します。

GL_ARB_depth_buffer_float

概要

[...]

さらに、この拡張機能は、 32 ビットの浮動小数点深度値8 ビットのステンシル、および24 の未使用ビットで構成される64 ビット ピクセルを持つ、新しいパックされた深度/ステンシル ピクセル形式 ( EXT_packed_depth_stencilを参照) を提供します。パックされた深度/ステンシル テクスチャ内部フォーマットも提供されます。

于 2014-03-14T15:59:44.483 に答える