Microsoft DirectX 8.0 (Visual Basic)

Direct3DDevice8.ValidateDevice

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

object.ValidateDevice() As Long

指定項目

object
Direct3DDevice8 オブジェクトを表すオブジェクト式。

戻り値

成功した場合は、マルチパス レンダリングによって目的のエフェクトを完成させるためのレンダリング パスの回数を返す。

エラー コード

失敗した場合はエラーが発生し、Err.Number に次のいずれかの値が設定される。

D3DERR_CONFLICTINGTEXTUREFILTER
D3DERR_CONFLICTINGTEXTUREPALETTE
D3DERR_TOOMANYOPERATIONS
D3DERR_UNSUPPORTEDALPHAARG
D3DERR_UNSUPPORTEDALPHAOPERATION
D3DERR_UNSUPPORTEDCOLORARG
D3DERR_UNSUPPORTEDCOLOROPERATION
D3DERR_UNSUPPORTEDFACTORVALUE
D3DERR_UNSUPPORTEDTEXTUREFILTER
D3DERR_WRONGTEXTUREFORMAT

エラー トラッピングの詳細については、Microsoft® Visual Basic® の「エラー処理」を参照すること。

注意

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

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

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

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

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

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

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

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

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

また多くのカードは、マルチ テクスチャとミップマップ トライリニア フィルタリングの同時使用をサポートしていない。マルチ テクスチャのブレンディング処理に関係するテクスチャに対してトライリニア フィルタリングを行う要求があり、確認が失敗した場合は、トライリニア フィルタリングをやめて再度確認を行う。このような場合には、代わりにマルチパス レンダリングを実行する必要がある。

参照

Direct3DDevice8.GetTextureStageStateDirect3DDevice8.SetTextureStageState