Microsoft DirectX 8.0 (C++)

アルファ テスティング ステート

C++ アプリケーションでは、アルファ テスティングを使用して、いつピクセルをレンダリング ターゲット サーフェスに書き込むかを制御する。D3DRS_ALPHATESTENABLE レンダリング ステートを使用することにより、アプリケーションでは、アルファ テスト関数に基づいて各ピクセルをテストできるように現在の Microsoft® Direct3D® デバイスを設定する。テストが成功すると、ピクセルがサーフェスに書き込まれる。テストが失敗すると、ピクセルは無視される。アルファ テスト関数は、D3DRS_ALPHAFUNC レンダリング ステートで選択する。D3DRS_ALPHAREF レンダリング ステートを使用することにより、アプリケーションでは、比較するすべてのピクセルに参照アルファ値を設定する。

アルファ テスティングは、通常、透明に近いオブジェクトをラスタ化する際のパフォーマンスを改善するために使用する。ラスタ化するカラー データが指定のピクセル (D3DPCMPCAPS_GREATEREQUAL) よりも不透明に近い場合、ピクセルが書き込まれる。そうでない場合は、ラスタライザはピクセルを無視し、2 色のブレンドに必要な処理を省略する。次のサンプル コードは、指定された比較関数がサポートされているかどうかを調べている。サポートされている場合は、レンダリングのパフォーマンス改善に必要な比較関数のパラメータを設定する。

// このサンプル コードでは、pCaps は、
// 前の IDirect3D8::GetDeviceCaps への呼び出しによって格納された
// D3DCAPS8 構造体であると仮定している。
if (pCaps.AlphaCmpCaps & D3DPCMPCAPS_GREATEREQUAL)
{
    dev->SetRenderState(D3DRS_ALPHAREF, (DWORD)0x00000001);
    dev->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); 
    dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
}
 
// 比較関数がサポートされていない場合にもレンダリングを実行する。 
// ただし、パフォーマンスは改善されない。

すべてのハードウェアがアルファ テスティング機能をサポートしているわけではない。デバイス機能を調べるには、IDirect3D8::GetDeviceCaps メソッドを呼び出す。デバイス機能を取得した後、使用する比較関数の関連する D3DCAPS8 構造体の AlphaCmpCaps メンバを調べる。AlphaCmpCaps メンバが D3DPCMPCAPS_ALWAYS 能力のみ、または D3DPCMPCAPS_NEVER 能力のみ含んでいる場合、ドライバはアルファ テストをまったくサポートしていない。