Especializando interfaces (Direct3D 10)
A Interface ID3D10EffectVariable tem vários métodos para converter a interface no tipo específico de interface de que você precisa. Os métodos são do formulário ComoTipo e incluem um método para cada tipo de variável de efeito (como AsBlend, AsConstantBuffer etc..)
Por exemplo, suponha que você tenha um efeito com duas variáveis globais: tempo e uma transformação de mundo.
float g_fTime;
float4x4 g_mWorld;
Aqui está um exemplo (de SimpleSample10 Sample) que obtém estas variáveis:
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();
Ao especializar as interfaces, você pode reduzir o código para uma única chamada.
g_pmWorld = (g_pEffect10->GetVariableByName("g_mWorld"))->AsMatrix();
g_pfTime = (g_pEffect10->GetVariableByName("g_fTime"))->AsScalar();
As interfaces herdadas da Interface ID3D10EffectVariable também têm esses métodos, mas foram projetadas para retornar objetos inválidos; apenas chamadas de ID3D10EffectVariable Interface retornam objetos válidos. Os aplicativos podem testar o objeto retornado para ver se ele é válido chamando ID3D10EffectVariable::IsValid.
Tópicos relacionados