Spécialisation des interfaces (Direct3D 10)
L' interface ID3D10EffectVariable dispose d’un certain nombre de méthodes pour effectuer un cast de l’interface dans le type d’interface particulier dont vous avez besoin. Les méthodes se présentent sous la forme type et incluent une méthode pour chaque type de variable d’effet (tel que AsBlend, AsConstantBuffer, etc.).
Par exemple, supposons que vous ayez un effet avec deux variables globales : Time et une transformation universelle.
float g_fTime;
float4x4 g_mWorld;
Voici un exemple (à partir de l' 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écialisant 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 l' interface ID3D10EffectVariable ont également ces méthodes, mais elles ont été conçues pour retourner des objets non valides ; Seuls les appels de l' interface ID3D10EffectVariable retournent des objets valides. Les applications peuvent tester l’objet retourné pour voir s’il est valide en appelant ID3D10EffectVariable :: IsValid.