Condividi tramite


Interfacce specializzate (Direct3D 11)

ID3DX11EffectVariable include diversi metodi per eseguire il cast dell'interfaccia nel particolare tipo di interfaccia necessario. I metodi sono del formato AsType e includono un metodo per ogni tipo di variabile di effetto (ad esempio AsBlend, AsConstantBuffer e così via).

Si supponga, ad esempio, di avere un effetto con due variabili globali: tempo e trasformazione globale.

float    g_fTime;
float4x4 g_mWorld;

Di seguito è riportato un esempio che ottiene queste variabili:

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

Specializzando le interfacce, è possibile ridurre il codice a una singola chiamata.

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

Anche le interfacce che ereditano da ID3DX11EffectVariable dispongono di questi metodi, ma sono stati progettati per restituire oggetti non validi; solo le chiamate da ID3DX11EffectVariable restituiscono oggetti validi. Le applicazioni possono testare l'oggetto restituito per verificare se è valido chiamando ID3DX11EffectVariable::IsValid.

effetti (Direct3D 11)