Dela via


Specialisera gränssnitt (Direct3D 10)

ID3D10EffectVariable Interface har ett antal metoder för att omvandla gränssnittet till den specifika typ av gränssnitt som du behöver. Metoderna är av formatet Somtyp och innehåller en metod för varje typ av effektvariabel (till exempel AsBlend, AsConstantBuffer osv.)

Anta till exempel att du har en effekt med två globala variabler: tid och en världstransformering.

float    g_fTime;
float4x4 g_mWorld;

Här är ett exempel (från SimpleSample10 Sample) som hämtar dessa variabler:

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

Genom att specialisera gränssnitten kan du minska koden till ett enda anrop.

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

Gränssnitt som ärver från ID3D10EffectVariable Interface också ha dessa metoder, men de har utformats för att returnera ogiltiga objekt. anropar endast från ID3D10EffectVariable Interface returnera giltiga objekt. Program kan testa det returnerade objektet för att se om det är giltigt genom att anropa ID3D10EffectVariable::IsValid.

effekter