Interfaces especializadas (Direct3D 10)
Id3D10EffectVariable Interface tiene varios métodos para convertir la interfaz en el tipo determinado de interfaz que necesita. Los métodos tienen el formato AsType e incluyen un método para cada tipo de variable de efecto (como AsBlend, AsConstantBuffer, etc.).
Por ejemplo, supongamos que tiene un efecto con dos variables globales: tiempo y una transformación del mundo.
float g_fTime;
float4x4 g_mWorld;
Este es un ejemplo (del ejemplo SimpleSample10) que obtiene estas variables:
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();
Al especializar las interfaces, puede reducir el código a una sola llamada.
g_pmWorld = (g_pEffect10->GetVariableByName("g_mWorld"))->AsMatrix();
g_pfTime = (g_pEffect10->GetVariableByName("g_fTime"))->AsScalar();
Las interfaces que heredan de ID3D10EffectVariable Interface también tienen estos métodos, pero se han diseñado para devolver objetos no válidos; Solo las llamadas de ID3D10EffectVariable Interface devuelven objetos válidos. Las aplicaciones pueden probar el objeto devuelto para ver si es válido llamando a ID3D10EffectVariable::IsValid.
Temas relacionados