アルファ テスト ステート (Direct3D 9)
C++ アプリケーションでは、アルファ テストを使用して、ピクセルがレンダー ターゲット サーフェスに書き込まれるタイミングを制御できます。アプリケーションで D3DRS_ALPHATESTENABLE レンダリング ステートを使用することにより、現在の Direct3D デバイスが各ピクセルをアルファ テスト関数に従ってテストするように設定することができます。テストに成功した場合は、ピクセルはサーフェスに書き込まます。テストが成功しなかった場合、そのピクセルは無視されます。アルファ テスト関数は D3DRS_ALPHAFUNC レンダリング ステートで選択します。アプリケーションでは、D3DRS_ALPHAREF を使用して、すべてのピクセルの比較対象となる基準アルファ値を設定できます。
アルファ テストは、ほぼ透明なオブジェクトをラスタライズするときのパフォーマンスの向上に最も一般的に使用されます。ラスタライズされるカラー データが特定のピクセルの色より不透明 (D3DPCMPCAPS_GREATEREQUAL) な場合、そのピクセルは書き込まれます。そうでない場合、ラスタライザーはピクセルを完全に無視し、2 つの色のブレンドに必要な処理を省略します。次のコード例は、与えられた比較関数がサポートされているかどうかをチェックし、サポートされている場合は、レンダリング中のパフォーマンスの向上に必要な比較関数のパラメーターを設定しています。
// This code example assumes that pCaps is a
// D3DCAPS9 structure that was filled with a
// previous call to IDirect3D9::GetDeviceCaps.
if (pCaps.AlphaCmpCaps & D3DPCMPCAPS_GREATEREQUAL)
{
dev->SetRenderState(D3DRS_ALPHAREF, (DWORD)0x00000001);
dev->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE);
dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
}
// If the comparison is not supported, render anyway.
// The only drawback is no performance gain.
すべてのハードウェアですべてのアルファ テスト機能がサポートされているとは限りません。デバイスの機能は、IDirect3D9::GetDeviceCaps メソッドを呼び出すことによってチェックできます。デバイスの機能を取得したら、対応する D3DCAPS9 構造体の AlphaCmpCaps メンバーで目的の比較関数がサポートされているかどうかをチェックします。AlphaCmpCaps メンバーに D3DPCMPCAPS_ALWAYS 機能のみまたは D3DPCMPCAPS_NEVER 機能のみが含まれる場合、そのドライバーはアルファ テストをサポートしません。