Введение в программирование трехмерных игр с DX9



         

Компиляция HLSL-шейдера



16.2.2. Компиляция HLSL-шейдера

Мы можем скомпилировать шейдер, код которого хранится в текстовом файле, с помощью следующей функции:

HRESULT D3DXCompileShaderFromFile( LPCSTR pSrcFile, CONST D3DXMACRO* pDefines, LPD3DXINCLUDE pInclude, LPCSTR pFunctionName, LPCSTR pTarget, DWORD Flags, LPD3DXBUFFER* ppShader, LPD3DXBUFFER* ppErrorMsgs, LPD3DXCONSTANTTABLE* ppConstantTable );

pSrcFile — Имя текстового файла, содержащего исходный код шейдера, который вы хотите скомпилировать.

pDefines — Необязательный параметр, и в данной книге мы всегда будем указывать в нем null.

pInclude — Указатель на интерфейс ID3DXInclude. Этот интерфейс разработан для тех приложений, которым требуется переопределить устанавливаемое по умолчанию поведение включения. В общем случае поведение по умолчанию замечательно работает и поэтому мы игнорируем данный параметр, передавая в нем null.

pFunctionName — Строка, задающая имя функции, являющейся точкой входа. Например, если точкой входа шейдера является функция с именем Main, мы должны передать в этом параметре строку «Main».

pTarget — Строка, задающая версию шейдеров для которой будет компилироваться исходный код HLSL. Для вершинных шейдеров доступны версии vs_1_1, vs_2_0, vs_2_sw. Для пиксельных шейдеров доступны версии ps_1_1, ps_1_2, ps_1_3, ps_1_4, ps_2_0, ps_2_sw. Например, если мы хотим чтобы наш вершинный шейдер был скомпилирован для версии 2.0, надо указать в этом параметре vs_2_0.

ПРИМЕЧАНИЕ

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

Flags — Необязательные флаги компиляции; если флаги не нужны, укажите 0. Можно использовать следующие значения:

D3DXSHADER_DEBUG — Приказывает компилятору включать в скомпилированный файл отладочную информацию.




Содержание  Назад  Вперед