专用接口 (Direct3D 10)

ID3D10EffectVariable 接口 有许多方法用于将接口强制转换为所需的特定接口类型。 这些方法的形式为 AsType ,并且包括每种类型的效果变量的方法, (AsBlend、AsConstantBuffer 等。)

例如,假设你具有两个全局变量的效果:时间和世界转换。

float    g_fTime;
float4x4 g_mWorld;

下面是从 SimpleSample10 示例) 获取这些变量的示例 (:

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

通过专用化接口,可以将代码减少为单个调用。

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

ID3D10EffectVariable 接口 继承的接口也有这些方法,但它们被设计为返回无效对象;仅从 ID3D10EffectVariable 接口 调用返回有效对象。 应用程序可以通过调用 ID3D10EffectVariable::IsValid 来测试返回的对象,以查看它是否有效。

效果