將介面 (Direct3D 10)

ID3D10EffectVariable 介面 有許多方法可將介面轉換成您需要的特定介面類別型。 方法的格式為 AsType ,並包含每個效果變數類型的方法, (例如 AsBlend、AsConstantBuffer 等。)

例如,假設您有兩個全域變數的效果:時間和世界轉換。

float    g_fTime;
float4x4 g_mWorld;

以下是 從 SimpleSample10 Sample) 取得這些變數的範例 (:

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來測試傳回的物件是否有效。

效果