netlib.narod.ru | < Назад | Оглавление | Далее > |
В приведенном ниже списке перечислены этапы, необходимые для создания и использования вершинного шейдера.
Написать и скомпилировать вершинный шейдер.
Создать представляющий вершинный шейдер интерфейс IDirect3DVertexShader9 на основе скомпилированного кода.
Установить вершинный шейдер с помощью метода IDirect3DDevice9::SetVertexShader.
И конечно же, мы должны уничтожить вершинный шейдер, когда работа с ним завершена. В следующих подразделах мы детально рассмотрим эти этапы.
Сперва мы должны написать программу вершинного шейдера. В этой книге мы пишем наши шейдеры на HLSL. Когда код шейдера написан, мы компилируем его с помощью функции D3DXCompileShaderFromFile, как было описано в разделе 16.2.2. Вспомните, что эта функция возвращает указатель на интерфейс ID3DXBuffer, который содержит скомпилированный код шейдера.
После того, как мы скомпилировали код шейдера, необходимо получить указатель на представляющий вершинный шейдер интерфейс IDirect3DVertexShader9 с помощью следующего метода:
HRESULT IDirect3DDevice9::CreateVertexShader( const DWORD *pFunction, IDirect3DVertexShader9** ppShader );
pFunction — Указатель на скомпилированный код шейдера.
ppShader — Возвращает указатель на интерфейс IDirect3DVertexShader9.
Предположим, переменная shader — это указатель на интерфейс ID3DXBuffer, содержащий скомпилированный код шейдера. Тогда для получения указателя на интерфейс IDirect3DVertexShader9 следует написать:
IDirect3DVertexShader9* ToonShader = 0; hr = Device->CreateVertexShader( (DWORD*)shader->GetBufferPointer(), &ToonShader);
После того, как мы получили указатель на интерфейс IDirect3DVertexShader9, представляющий наш вершинный шейдер, мы должны разрешить его использование с помощью следующего метода:
HRESULT IDirect3DDevice9::SetVertexShader( IDirect3DVertexShader9* pShader );
Метод получает единственный параметр в котором мы передаем указатель на тот вершинный шейдер, который должен быть включен. Чтобы включить шейдер, созданный в разделе 17.3.2, следует написать:
Device->SetVertexShader(ToonShader);
Как и для всех интерфейсов Direct3D, здесь для очистки мы должны при завершении работы с интерфейсом вызвать его метод Release. Продолжая изучать пример шейдера созданного в разделе 17.3.2, мы получаем:
d3d::Release<IDirect3DVertexShader9*>(ToonShader);
netlib.narod.ru | < Назад | Оглавление | Далее > |