专用接口 (Direct3D 10)

ID3D10EffectVariable 接口 有许多方法可将接口强制转换为所需的特定接口类型。 这些方法采用 As类型 的形式,并包括每种效果变量的方法(如 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来测试返回的对象是否有效。

效果