专用接口 (Direct3D 11)

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 来测试返回的对象,以查看它是否有效。

Direct3D 11) (效果