ID3DX11EffectVariable 有许多方法可将接口强制转换为所需的特定接口类型。 这些方法采用 AsType 的形式,并包括每种效果变量的方法(如 AsBlend、AsConstantBuffer 等)。
例如,假设你有一个效果,其中包含两个全局变量:时间和世界转换。
float g_fTime;
float4x4 g_mWorld;
下面是获取这些变量的示例:
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();
通过专门处理接口,可以将代码减少为单个调用。
g_pmWorld = (g_pEffect11->GetVariableByName("g_mWorld"))->AsMatrix();
g_pfTime = (g_pEffect11->GetVariableByName("g_fTime"))->AsScalar();
从 ID3DX11EffectVariable 继承的接口也具有这些方法,但它们旨在返回无效对象;仅从 ID3DX11EffectVariable 调用 返回有效对象。 应用程序可以通过调用 ID3DX11EffectVariable::IsValid来测试返回的对象是否有效。
相关主题