Microsoft DirectX 8.0 (C++)

IDirect3DDevice8::ValidateDevice

現在のテクスチャのブレンディング処理と引数をデバイスが 1 回の処理でレンダリングできる能力を報告する。

HRESULT ValidateDevice(
  DWORD* pNumPasses
);

パラメータ

pNumPasses
[out, retval] マルチパス レンダリングによって目的のエフェクトを完成するために必要なレンダリング パスの数を格納する DWORD 値へのポインタ。

戻り値

成功した場合は、D3D_OK を返す。

失敗した場合は、次のいずれかの値を返す。

D3DERR_CONFLICTINGTEXTUREFILTER
D3DERR_CONFLICTINGTEXTUREPALETTE
D3DERR_TOOMANYOPERATIONS
D3DERR_UNSUPPORTEDALPHAARG
D3DERR_UNSUPPORTEDALPHAOPERATION
D3DERR_UNSUPPORTEDCOLORARG
D3DERR_UNSUPPORTEDCOLOROPERATION
D3DERR_UNSUPPORTEDFACTORVALUE
D3DERR_UNSUPPORTEDTEXTUREFILTER
D3DERR_WRONGTEXTUREFORMAT

注意

ValidateDevice メソッドは、ほかの能力が付属しているシナリオを検証する場合にのみ使用しなければならない。たとえば、マルチステージ テクスチャリングのシナリオでは、D3DCAPS8 構造体の MaxTextureBlendStages メンバと MaxSimultaneousTextures メンバを調べることで、そのデバイスでマルチステージ テクスチャリングが可能かどうかを判断できる。

現在のハードウェアが、必ずしも操作と引数の可能なすべての組み合わせを実装している必要はない。与えられた引数で特定のブレンディング処理を実行できるかどうかは、目的のブレンディング処理を設定し、ValidateDevice メソッドを呼び出すことにより確認できる。

ValidateDevice メソッドは、現在のレンダリング ステート、テクスチャ、テクスチャ ステージのステートを使って、呼び出された時点での確認を行う。この呼び出しの後でこれらの要素に変更があると、それまでの確認結果は無効になるので、シーンのレンダリングをする前にこのメソッドを再度呼び出さなければならない。

ディフューズ補間値の引数または操作 (D3DTA_DIFFUSE または D3DTOP_BLENDDIFFUSEALPHA) としての使用は、現在のハードウェアではほとんどサポートされていない。ほとんどのハードウェアでは、直前のテクスチャ処理ステージにおいて補間色データの値を導入している程度である。

各ステージのテクスチャ (D3DTA_TEXTURE) は、第 2 引数ではなく第 1 引数として指定するようにする。

多くのカードは、任意のテクスチャ ステージにおけるディフューズ値やスカラー値の使用はサポートしていない。これらは、最初または最後のテクスチャ ブレンディング ステージでのみ使用できることが多い。

最初のテクスチャに関連付けられたブレンディング ユニットで、アルファ チャネルからカラー チャネルへの複製や入力反転など以上の能力を持つものを備えたカードは少ない。したがって、アプリケーションでは、可能な場合、2 つ目のテクスチャ ステージのみ使用しなければならないときがある。このようなハードウェアでは、最初のユニットはデフォルト ステートにあると仮定され、D3DTOP_SELECTARG1 処理における第 1 カラー引数には D3DTA_TEXTURE が設定される。

出力されるアルファ値に対する操作で、カラー処理より複雑なもの、またはカラー処理と本質的に異なるものをサポートするハードウェアは、さらに少ない。

ハードウェアによっては、D3DTA_TFACTOR と D3DTA_DIFFUSE の同時使用をサポートしていない場合もある。

また多くのカードは、マルチテクスチャとミップマップ トライリニア フィルタリングの同時使用をサポートしていない。マルチ テクスチャ ブレンディング処理におけるテクスチャに対してトライリニア フィルタリングが要求された場合、妥当性検証が失敗すると、トライリニア フィルタリングはオフになり再検証が行われる。このような場合には、代わりにマルチパス レンダリングを実行することができる。

動作環境

  ヘッダー : d3d8.h で宣言。
  インポート ライブラリ : D3d8.lib を使用。

参照

IDirect3DDevice8::GetTextureStageStateIDirect3DDevice8::SetTextureStageState