Partilhar via


Interfaces especializadas (Direct3D 11)

ID3DX11EffectVariable tem vários métodos para transmitir a interface para o tipo específico de interface que você precisa. Os métodos são da forma AsType 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 que obtém essas variáveis:

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

Ao especializar as interfaces, você pode reduzir o código a uma única chamada.

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

As interfaces que herdam de ID3DX11EffectVariable também ter esses métodos, mas eles foram projetados para retornar objetos inválidos; somente chamadas de ID3DX11EffectVariable retornam objetos válidos. Os aplicativos podem testar o objeto retornado para ver se ele é válido chamando ID3DX11EffectVariable::IsValid.

Effects (Direct3D 11)