共用方式為


(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 (效果)