Delen via


Speciale interfaces (Direct3D 11)

ID3DX11EffectVariable heeft een aantal methoden voor het gieten van de interface in het specifieke type interface dat u nodig hebt. De methoden zijn van de vorm AsType- en bevatten een methode voor elk type effectvariabele (zoals AsBlend, AsConstantBuffer, enzovoort).

Stel dat u een effect hebt met twee globale variabelen: tijd en een wereldtransformatie.

float    g_fTime;
float4x4 g_mWorld;

Hier volgt een voorbeeld dat deze variabelen ophaalt:

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

Door de interfaces te specialiseren, kunt u de code beperken tot één aanroep.

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

Interfaces die overnemen van ID3DX11EffectVariable hebben ook deze methoden, maar ze zijn ontworpen om ongeldige objecten te retourneren; alleen aanroepen van ID3DX11EffectVariable geldige objecten retourneren. Toepassingen kunnen het geretourneerde object testen om te zien of het geldig is door ID3DX11EffectVariable::IsValidaan te roepen.

effecten (Direct3D 11)