特殊なインターフェイス (Direct3D 11)
ID3DX11EffectVariable には、インターフェイスを必要な特定の種類のインターフェイスにキャストするためのメソッドが多数用意されています。 メソッドは AsType 形式で、効果変数の種類ごとにメソッド (AsBlend、AsConstantBuffer など) が含まれます。
たとえば、時間とワールド変換という 2 つのグローバル変数を持つ効果があるとします。
float g_fTime;
float4x4 g_mWorld;
これらの変数を取得する例を次に示します。
ID3DX11EffectVariable* g_pVariable;
ID3DX11EffectMatrixVariable* g_pmWorld;
ID3DX11EffectScalarVariable* g_pfTime;
g_pVariable = g_pEffect11->GetVariableByName("g_mWorld");
g_pmWorld = g_pVariable->AsMatrix();
g_pVariable = g_pEffect11->GetVariableByName("g_fTime");
g_pfTime = g_pVariable->AsScalar();
インターフェイスを特殊化することで、コードを 1 回の呼び出しに減らすことができます。
g_pmWorld = (g_pEffect11->GetVariableByName("g_mWorld"))->AsMatrix();
g_pfTime = (g_pEffect11->GetVariableByName("g_fTime"))->AsScalar();
ID3DX11EffectVariable から継承するインターフェイスにもこれらのメソッドがありますが、無効なオブジェクトを返すように設計されています。ID3DX11EffectVariable からの呼び出しのみが有効なオブジェクトを返します。 アプリケーションは、返されたオブジェクトをテストして、 ID3DX11EffectVariable::IsValid を呼び出して有効かどうかを確認できます。
関連トピック