Microsoft DirectX 8.0 (C++)

ステンシル バッファの動作

Microsoft® Direct3D® は、ステンシル バッファの内容をピクセル単位に調べる。ステンシル バッファの対応する値、ステンシル参照値、およびステンシル マスク値を使用して、ターゲット サーフェスの各ピクセルに対するテストを行う。テストにパスすると、Direct3D はアクションを実行する。このテストは次の手順で実行される。

  1. ステンシル参照値とステンシル マスクのビット積を計算する。
  2. カレント ピクセルに対するステンシル バッファ値とステンシル マスクのビット積を計算する。
  3. 比較関数を使用して、手順 1 と手順 2 の結果を比較する。

これらのステップを次の例で示す。

(StencilRef & StencilMask) CompFunc (StencilBufferValue & StencilMask)

ここで、StencilBufferValue は、カレント ピクセルに対するステンシル バッファの内容である。このコードでは、アンパサンド (&) 記号はビット積演算を表している。StencilMask はステンシル マスク、StencilRef はステンシル参照値を表している。CompFunc は比較関数である。

このステンシル テストにパスすると、カレント ピクセルはターゲット サーフェスに書き込まれるが、失敗した場合は無視される。デフォルトの比較処理では、各ビット演算の結果に関係なく、ピクセルが書き込まれる (D3DCMP_ALWAYS)。この動作を変更するには、目的の比較関数を指定する D3DCMPFUNC 列挙型のメンバを渡して、D3DRS_STENCILFUNC レンダリング ステートの値を変更する。