Freigeben über


Spezialisieren von Schnittstellen (Direct3D 11)

ID3DX11EffectVariable verfügt über eine Reihe von Methoden zum Umwandeln der Schnittstelle in den jeweiligen Typ der benötigten Schnittstelle. Die Methoden haben die Form 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: zeit und welttransformation.

float    g_fTime;
float4x4 g_mWorld;

Hier sehen Sie ein Beispiel, das die folgenden Variablen abruft:

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

Durch die Spezialisierung der Schnittstellen können Sie den Code auf einen einzelnen Aufruf reduzieren.

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

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

Effekte (Direct3D 11)