インターフェイスの特化 (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 を呼び出すことによって、返されたオブジェクトをテストして有効かどうかを確認できます。