Freigeben über


Spezialisieren von Schnittstellen (Direct3D 10)

Id3D10EffectVariable Interface verfügt über eine Reihe von Methoden zum Umwandeln der Schnittstelle in den jeweiligen Schnittstellentyp, den Sie benötigen. Die Methoden haben das Format AsType und enthalten eine Methode für jeden Typ von Effektvariablen (z. B. AsBlend, AsConstantBuffer usw.).

Angenommen, Sie haben einen Effekt mit zwei globalen Variablen: time und einer Welttransformation.

float    g_fTime;
float4x4 g_mWorld;

Im Folgenden finden Sie ein Beispiel (aus dem SimpleSample10-Beispiel), das diese Variablen abruft:

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

Wenn Sie die Schnittstellen spezialisieren, können Sie den Code auf einen einzelnen Aufruf reduzieren.

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

Schnittstellen, die von ID3D10EffectVariable Interface erben, verfügen ebenfalls über diese Methoden, aber sie wurden entwickelt, um ungültige Objekte zurückzugeben. Nur Aufrufe von ID3D10EffectVariable Interface geben gültige Objekte zurück. Anwendungen können das zurückgegebene Objekt testen, um zu ermitteln, ob es gültig ist, indem ID3D10EffectVariable::IsValid aufgerufen wird.

Effekte