Compartir a través de


Interfaces especializadas (Direct3D 11)

ID3DX11EffectVariable 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: el tiempo y una transformación del mundo.

float    g_fTime;
float4x4 g_mWorld;

Este es un ejemplo que obtiene estas variables:

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();

Al especializar las interfaces, podría reducir el código a una sola llamada.

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

Las interfaces que heredan de ID3DX11EffectVariable también tienen estos métodos, pero se han diseñado para devolver objetos no válidos; solo las llamadas de ID3DX11EffectVariable devuelven objetos válidos . Las aplicaciones pueden probar el objeto devuelto para ver si es válido llamando a ID3DX11EffectVariable::IsValid.

Efectos (Direct3D 11)