Specializační rozhraní (Direct3D 10)
ID3D10EffectVariable Interface má řadu metod přetypování rozhraní na konkrétní typ rozhraní, které potřebujete. Metody jsou formuláře JakoTyp a zahrnují metodu pro každý typ proměnné efektu (například AsBlend, AsConstantBuffer atd.).
Předpokládejme například, že máte účinek se dvěma globálními proměnnými: časem a světovou transformací.
float g_fTime;
float4x4 g_mWorld;
Tady je příklad (z SimpleSample10 Sample), který získá tyto proměnné:
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();
Tím, že se specializujete na rozhraní, můžete kód snížit na jedno volání.
g_pmWorld = (g_pEffect10->GetVariableByName("g_mWorld"))->AsMatrix();
g_pfTime = (g_pEffect10->GetVariableByName("g_fTime"))->AsScalar();
Rozhraní, která dědí z ID3D10EffectVariable Interface mají také tyto metody, ale byly navrženy tak, aby vracely neplatné objekty; Pouze volání z ID3D10EffectVariable Interface vrátit platné objekty. Aplikace mohou testovat vrácený objekt a zjistit, zda je platný voláním ID3D10EffectVariable::IsValid.
Související témata