Specjalne interfejsy (Direct3D 11)
ID3DX11EffectVariable ma wiele metod rzutowania interfejsu do określonego typu potrzebnego interfejsu. Metody są formą AsType i zawierają metodę dla każdego typu zmiennej efektu (na przykład AsBlend, AsConstantBuffer itp.).
Załóżmy na przykład, że masz efekt z dwiema zmiennymi globalnymi: czasem i transformacją świata.
float g_fTime;
float4x4 g_mWorld;
Oto przykład, który pobiera te zmienne:
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();
Specjalizując się w interfejsach, można zmniejszyć kod do pojedynczego wywołania.
g_pmWorld = (g_pEffect11->GetVariableByName("g_mWorld"))->AsMatrix();
g_pfTime = (g_pEffect11->GetVariableByName("g_fTime"))->AsScalar();
Interfejsy dziedziczone z ID3DX11EffectVariable również te metody, ale zostały zaprojektowane tak, aby zwracały nieprawidłowe obiekty; tylko wywołania z ID3DX11EffectVariable zwracają prawidłowe obiekty. Aplikacje mogą przetestować zwrócony obiekt, aby sprawdzić, czy jest prawidłowy, wywołując ID3DX11EffectVariable::IsValid.
Tematy pokrewne
-
efekty (Direct3D 11)