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

18.3. Этапы работы с пиксельным шейдером

Приведенный ниже список перечисляет действия, которые необходимо выполнить для создания и использования пиксельного шейдера.

  1. Написать и скомпилировать пиксельный шейдер.

  2. Создать представляющий пиксельный шейдер интерфейс IDirect3DPixelShader9 на основании скомпилированного кода шейдера.

  3. Установить пиксельный шейдер с помощью метода IDirect3DDevice9::SetPixelShader.

Конечно же, после завершения работы нам надо уничтожить пиксельный шейдер. В следующих разделах детально рассмотрены все эти этапы.

18.3.1. Написание и компиляция пиксельного шейдера

Мы компилируем пиксельный шейдер точно так же, как компилировали вершинные шейдеры. Сперва мы должны написать программу пиксельного шейдера. В этой книге мы пишем наши шейдеры на HLSL. Как только исходный код шейдера написан, мы можем скомпилировать его с помощью функции D3DXCompileShaderFromFile, как описано в разделе 16.2. Вспомните, что эта функция возвращает указатель на интерфейс ID3DXBuffer, который содержит скомпилированный код шейдера.

ПРИМЕЧАНИЕ
Поскольку сейчас мы работаем с пиксельными шейдерами, важно помнить о том, что при компиляции необходимо указывать целевую версию пиксельных шейдероы (т.е. ps_2_0), а не целевую версию вершинных шейдеров (т.е. vs_2_0). Целевая версия шейдеров указывается в параметре функции D3DXCompileShaderFromFile. За подробностями обратитесь к разделу 16.2.

18.3.2. Создание пиксельного шейдера

Когда у нас есть скомпилированный код шейдера, мы можем получить указатель на представляющий пиксельный шейдер интерфейс IDirect3DPixelShader9, воспользовавшись следующим методом:

HRESULT IDirect3DDevice9::CreatePixelShader(
     CONST DWORD *pFunction,
     IDirect3DPixelShader9** ppShader
);

Предположим, например, что переменная shader — это экземпляр интерфейса ID3DXBuffer, который содержит скомпилированный код шейдера. Тогда, для получения интерфейса IDirect3DPixelShader9 следует написать:

IDirect3DPixelShader9* MultiTexPS = 0;
hr = Device->CreatePixelShader(
           (DWORD*)shader->GetBufferPointer(),
           &MultiTexPS);

 

ПРИМЕЧАНИЕ
Повторим еще раз, D3DXCompileShaderFromFile — это функция, которая возвращает скомпилированный код шейдера (shader).

18.3.3. Установка пиксельного шейдера

После того, как мы получили указатель на представляющий наш пиксельный шейдер интерфейс IDirect3DPixelShader9, можно разрешить его использование с помощью следующего метода:

HRESULT IDirect3DDevice9::SetPixelShader(
     IDirect3DPixelShader9* pShader
);

Метод получает единственный параметр в котором мы передаем указатель на устанавливаемый пиксельный шейдер. Чтобы включить шейдер, который мы создали в разделе 18.3.2, следует написать:

Device->SetPixelShader(MultiTexPS);

18.3.4. Уничтожение пиксельного шейдера

Как и для всех интерфейсов Direct3D, здесь для очистки мы должны при завершении работы с интерфейсом вызвать его метод Release. Продолжая изучать пример пиксельного шейдера созданного в разделе 18.3.2, мы получаем:

d3d::Release<IDirect3DPixelShader9*>(MultiTexPS);

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

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