次の方法で共有


インターフェイスの特化 (Direct3D 10)

ID3D10EffectVariable インターフェイスには、このインターフェイスを必要な特定の型のインターフェイスにキャストするためのメソッドが多数用意されています。これらのメソッドの形式は AsType で、エフェクト変数の型ごとに 1 つのメソッドがあります (AsBlend、AsConstantBuffer など)。

たとえば、時間とワールド トランスフォームの 2 つのグローバル変数を持つエフェクトがあるとします。

 float    g_fTime; float4x4 g_mWorld; 

次に、これらの変数を取得する (SimpleSample10 サンプルからの) 例を示します。

 ID3D10EffectVariable* g_pVariable; ID3D10EffectMatrixVariable* g_pmWorld; ID3D10EffectScalarVariable* g_pfTime;  g_pVariable = g_pEffect10->GetVariableByName("g_mWorld"); g_pmWorld = g_pVariable->AsMatrix(); g_pfTime = g_pEffect10->GetVariableByName("g_fTime"); g_pfTime = g_pVariable->AsScalar(); 

インターフェイスを特化することによって、コードを 1 つの呼び出しに縮小することができます。

 g_pmWorld = (g_pEffect10->GetVariableByName("g_mWorld"))->AsMatrix(); g_pfTime = (g_pEffect10->GetVariableByName("g_fTime"))->AsScalar(); 

ID3D10EffectVariable インターフェイスから継承したインターフェイスにもこれらのメソッドはありますが、それらのインターフェイスは無効なオブジェクトを返すように設計されています。ID3D10EffectVariable インターフェイスからの呼び出しのみが有効なオブジェクトを返します。アプリケーションで、ID3D10EffectVariable::IsValid を呼び出すことによって、返されたオブジェクトをテストして有効かどうかを確認できます。