Поделиться через


Специализированные интерфейсы (Direct3D 10)

Интерфейс ID3D10EffectVariable имеет ряд методов для приведения интерфейса к нужному типу интерфейса. Методы имеют формуAs Type и включают метод для каждого типа переменной эффекта (например, 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 Interface , также имеют эти методы, но они предназначены для возврата недопустимых объектов; Только вызовы из ID3D10EffectVariable Interface возвращают допустимые объекты. Приложения могут проверить возвращенный объект, чтобы проверить, является ли он допустимым, вызвав ID3D10EffectVariable::IsValid.

Эффекты