Interfacce specializzate (Direct3D 10)
L'interfaccia ID3D10EffectVariable include diversi metodi per eseguire il cast dell'interfaccia nel tipo specifico 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 mondiale.
float g_fTime;
float4x4 g_mWorld;
Ecco un esempio (da SimpleSample10 Sample) che ottiene queste variabili:
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();
Grazie alla specializzazione delle interfacce, è possibile ridurre il codice a una singola chiamata.
g_pmWorld = (g_pEffect10->GetVariableByName("g_mWorld"))->AsMatrix();
g_pfTime = (g_pEffect10->GetVariableByName("g_fTime"))->AsScalar();
Le interfacce che ereditano da ID3D10EffectVariable Interface hanno anche questi metodi, ma sono stati progettati per restituire oggetti non validi; solo le chiamate da ID3D10EffectVariable Interface restituiscono oggetti validi. Le applicazioni possono testare l'oggetto restituito per verificare se è valido chiamando ID3D10EffectVariable::IsValid.
Argomenti correlati