netlib.narod.ru< Назад | Оглавление | Далее >

19.5. Установка констант

Как и в случае с вершинными и пиксельными шейдерами нам необходима возможность инициализировать переменные эффекта из приложения. Однако, вместо таблицы констант, которой мы пользовались при работе с вершинными и пиксельными шейдерами, интерфейс ID3DXEffect предоставляет встроенные методы для инициализации переменных. Мы не будем приводить список всех методов для инициализации различных типов переменных, поскольку он очень велик и в нем много повторений. Если вам все же хочется увидеть полный список — обратитесь к документации DirectX SDK. Вот сокращенный список методов:


Функция Описание
HRESULT ID3DXEffect::SetFloat(
   D3DXHANDLE hParameter,
   FLOAT f
);
Присваивает идентифицируемой дескриптором hParameter переменной с плавающей точкой из файла эффекта значение f
HRESULT ID3DXEffect::SetMatrix(
   D3DXHANDLE hParameter,
   CONST D3DXMATRIX* pMatrix
);
Инициализирует идентифицируемую дескриптором hParameter матрицу в файле эффекта, копируя в нее значения из матрицы на которую указывает pMatrix
HRESULT ID3DXEffect::SetString(
   D3DXHANDLE hParameter,
   CONST LPCSTR pString
);
Инициализирует идентифицируемую дескриптором hParameter строковую переменную в файле эффекта, копируя в нее текст из строки на которую указывает pString
HRESULT ID3DXEffect::SetTexture(
   D3DXHANDLE hParameter,
   LPDIRECT3DBASETEXTURE9 pTexture
);
Инициализирует идентифицируемый дескриптором hParameter объект текстуры в файле эффекта на основании текстуры, на которую указывает pTexture
HRESULT ID3DXEffect::SetVector(
   D3DXHANDLE hParameter,
   CONST D3DXVECTOR4* pVector
);
Инициализирует идентифицируемый дескриптором hParameter вектор в файле эффекта, копируя в него значения из вектора на который указывает pVector
HRESULT ID3DXEffect::SetVertexShader(
   D3DXHANDLE hParameter,
   LPDIRECT3DVERTEXSHADER9 pVertexShader
);
Инициализирует идентифицируемый дескриптором hParameter объект вершинного шейдера в файле эффекта на основании вершинного шейдера, на который указывает pVertexShader
HRESULT ID3DXEffect::SetPixelShader(
   D3DXHANDLE hParameter,
   LPDIRECT3DPIXELSHADER9 pPShader
);
Инициализирует идентифицируемый дескриптором hParameter объект пиксельного шейдера в файле эффекта на основании пиксельного шейдера, на который указывает pPShader


Мы получаем дескрипторы переменных (также называемых параметры эффекта) с помощью следующего метода:

D3DXHANDLE ID3DXEffect::GetParameterByName(
     D3DXHANDLE hParent, // область видимости переменной -
                         // родительская структура
     LPCSTR pName        // имя переменной
);

Его сигнатура аналогична методу ID3DXConstantTable::GetConstantByName. То есть первый параметр — это значение типа D3DXHANDLE, идентифицирующее родительскую структуру в пределах которой живет переменная, дескриптор которой мы хотим получить. Для глобальных переменных родительская структура отсутствует, и в этом параметре мы передаем null. Второй параметр — это имя переменной в том виде, в котором оно приведено в коде файла эффекта.

Для примера давайте взглянем на инициализацию нескольких переменных в файле эффекта:

// Данные для инициализации
D3DXMATRIX M;
D3DXMatrixIdentity(&M);

D3DXVECTOR4 color(1.0f, 0.0f, 1.0f, 1.0f);

IDirect3DTexture9* tex = 0;
D3DXCreateTextureFromFile(Device, "shade.bmp", &tex);

// Получаем дескрипторы параметров
D3DXHANDLE MatrixHandle = Effect->GetParameterByName(0, "Matrix");
D3DXHANDLE MtrlHandle   = Effect->GetParameterByName(0, "Mtrl");
D3DXHANDLE TexHandle    = Effect->GetParameterByName(0, "Tex");

// Инициализируем параметры
Effect->SetMatrix(MatrixHandle, &M);
Effect->SetVector(MtrlHandle, &color);
Effect->SetTexture(TexHandle, tex);

 

ПРИМЕЧАНИЕ
Для каждого метода ID3DXEffect::Set* есть соответствующий метод ID3DXEffect::Get*, позволяющий приложению получить значение переменной из файла эффекта. Например, для получения значений матрицы мы можем использовать функцию
HRESULT ID3DXEffect::GetMatrix(
     D3DXHANDLE hParameter,
     D3DXMATRIX* pMatrix
);

Чтобы увидеть полный список методов, обратитесь к документации DirectX SDK.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz