專業介面 (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來測試傳回的物件是否有效。
相關主題