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

17.3. Этапы работы с вершинным шейдером

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

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

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

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

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

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

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

17.3.2. Создание вершинного шейдера

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

HRESULT IDirect3DDevice9::CreateVertexShader(
     const DWORD *pFunction,
     IDirect3DVertexShader9** ppShader
);

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

IDirect3DVertexShader9* ToonShader = 0;
hr = Device->CreateVertexShader(
           (DWORD*)shader->GetBufferPointer(),
           &ToonShader);

 

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

17.3.3. Установка вершинного шейдера

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

HRESULT IDirect3DDevice9::SetVertexShader(
     IDirect3DVertexShader9* pShader
);

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

Device->SetVertexShader(ToonShader);

17.3.4. Уничтожение вершинного шейдера

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

d3d::Release<IDirect3DVertexShader9*>(ToonShader);

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

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