Специализированные интерфейсы (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)