IDirect3DDevice9::ValidateDevice メソッド
IDirect3DDevice9::ValidateDevice メソッド
現在のテクスチャのブレンディング処理と引数をデバイスが 1 回の処理でレンダリングできる能力を報告する。
構文
HRESULT ValidateDevice(
DWORD *pNumPasses
);
パラメータ
- pNumPasses
[out, retval] マルチパス レンダリングによって目的のエフェクトを完成するために必要なレンダリング パスの数を格納する DWORD 値へのポインタ。
戻り値
成功した場合は、D3D_OK を返す。
失敗した場合は、次のいずれかの値を返す。
D3DERR_CONFLICTINGTEXTUREFILTER | 現在のテクスチャ フィルタは同時には使えない。 |
D3DERR_DEVICELOST | デバイスは、消失しているが、現在リセットできない。したがって、レンダリングは不可能である。 |
D3DERR_DRIVERINTERNALERROR | 内部ドライバ エラー。通常、このエラーを受け取ったら、アプリケーションはシャットダウンしなければならない。詳細については、「ドライバの内部エラー」を参照すること。 |
D3DERR_TOOMANYOPERATIONS | デバイスがサポートしている数より多くのテクスチャ フィルタリング処理を、アプリケーションが要求している。 |
D3DERR_UNSUPPORTEDALPHAARG | アルファ チャンネルに対して指定されているテクスチャ ブレンディング引数を、デバイスがサポートしていない。 |
D3DERR_UNSUPPORTEDALPHAOPERATION | アルファ チャンネルに対して指定されているテクスチャ ブレンディング処理を、デバイスがサポートしていない。 |
D3DERR_UNSUPPORTEDCOLORARG | 色値に対して指定されているテクスチャ ブレンディング引数を、デバイスがサポートしていない。 |
D3DERR_UNSUPPORTEDCOLOROPERATION | 色値に対して指定されているテクスチャ ブレンディング処理を、デバイスがサポートしていない。 |
D3DERR_UNSUPPORTEDFACTORVALUE | デバイスが指定されたテクスチャ係数値をサポートしていない。 |
D3DERR_UNSUPPORTEDTEXTUREFILTER | デバイスが指定されたテクスチャ フィルタをサポートしていない。 |
D3DERR_WRONGTEXTUREFORMAT | テクスチャ サーフェイスのピクセル フォーマットが無効である。 |
注意
IDirect3DDevice9::ValidateDevice メソッドは、他の能力が付属しているシナリオを検証する場合にのみ使わなければならない。たとえば、マルチステージ テクスチャリングのシナリオでは、D3DCAPS9 構造体の MaxTextureBlendStages メンバと MaxSimultaneousTextures メンバを調べることで、そのデバイスでマルチステージ テクスチャリングが可能かどうかを判断できる。
現在のハードウェアが、必ずしも操作と引数の可能なすべての組み合わせを実装している必要はない。与えられた引数で特定のブレンディング処理を実行できるかどうかは、目的のブレンディング処理を設定し、IDirect3DDevice9::ValidateDevice メソッドを呼び出せば確認できる。
IDirect3DDevice9::ValidateDevice メソッドは、現在のレンダリング ステート、テクスチャ、テクスチャ ステージのステートを使って、呼び出された時点での確認を行う。この呼び出しの後でこれらの要素に変更があると、それまでの確認結果は無効になるので、シーンのレンダリングをする前にこのメソッドを再度呼び出さなければならない。
最適なパフォーマンスを得るには、初期化時に IDirect3DDevice9::ValidateDevice を呼び出すこと。ただし、レンダリング ループ内でこれを使ってはならない。
ディフューズ補間値の引数または操作 (D3DTA_DIFFUSED3DTOP_BLENDDIFFUSEALPHA) としての使用は、現在のハードウェアではほとんどサポートされていない。ほとんどのハードウェアでは、直前のテクスチャ処理ステージにおいて補間色データの値を導入している程度である。
各ステージのテクスチャ (D3DTA_TEXTURE) は、第 2 引数ではなく第 1 引数として指定するようにする。
多くのカードは、任意のテクスチャ ステージにおけるディフューズ値やスカラー値の使用はサポートしていない。これらは、最初または最後のテクスチャ ブレンディング ステージでのみ使用できることが多い。
最初のテクスチャに関連付けられたブレンディング ユニットで、アルファ チャンネルからカラー チャンネルへの複製や入力反転など以上の能力を持つものを備えたカードは少ない。したがって、アプリケーションでは、可能な場合、2 つ目のテクスチャ ステージのみを使わなければならないときがある。このようなハードウェアでは、最初のユニットはデフォルト ステートにあると仮定され、D3DTOP_SELECTARG1 処理における第 1 カラー引数には D3DTA_TEXTURE が設定される。
出力されるアルファ値に対する処理で、カラー処理より複雑なもの、またはカラー処理と本質的に異なるものをサポートするハードウェアは、さらに少ない。
ハードウェアによっては、D3DTA_TFACTOR と D3DTA_DIFFUSE の同時使用をサポートしていない場合もある。
また多くのカードは、マルチ テクスチャとミップマップ トライリニア フィルタリングの同時使用をサポートしていない。マルチ テクスチャ ブレンディング処理におけるテクスチャに対してトライリニア フィルタリングが要求された場合、妥当性検証が失敗すると、トライリニア フィルタリングはオフになり再検証が行われる。このような場合には、代わりにマルチパス レンダリングを実行すればよい。
参照
IDirect3DDevice9::GetTextureStageState、IDirect3DDevice9::SetTextureStageState