Partager via


Interfaces spécialisées (Direct3D 10)

'interface ID3D10EffectVariable a plusieurs méthodes pour la conversion de l’interface dans le type particulier d’interface dont vous avez besoin. Les méthodes sont de la forme AsType et incluent une méthode pour chaque type de variable d’effet (comme AsBlend, AsConstantBuffer, etc.).

Par exemple, supposons que vous ayez un effet avec deux variables globales : le temps et une transformation mondiale.

float    g_fTime;
float4x4 g_mWorld;

Voici un exemple (de Exemple simpleSample10) qui obtient ces variables :

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

En spécialisé dans les interfaces, vous pouvez réduire le code à un seul appel.

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

Les interfaces qui héritent de ID3D10EffectVariable Interface ont également ces méthodes, mais elles ont été conçues pour retourner des objets non valides ; seuls les appels de ID3D10EffectVariable Interface retourner des objets valides. Les applications peuvent tester l’objet retourné pour voir s’il est valide en appelant ID3D10EffectVariable ::IsValid.

Effets