| netlib.narod.ru | < Назад | Оглавление | Далее > |
Эффект представляется интерфейсом ID3DXEffect, который мы создаем с помощью следующей функции из библиотеки D3DX:
HRESULT D3DXCreateEffectFromFile(
LPDIRECT3DDEVICE9 pDevice,
LPCSTR pSrcFile,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
DWORD Flags,
LPD3DXEFFECTPOOL pPool,
LPD3DXEFFECT* ppEffect,
LPD3DXBUFFER *ppCompilationErrors
);
pDevice — Устройство, связанное с создаваемым эффектом ID3DXEffect.
pSrcFile — Имя текстового файла (файла эффекта) содержащего исходный код того эффекта, который мы хотим скомпилировать.
pDefines — Необязательный параметр, в этой книге мы всегда будем указывать в нем null.
pInclude — Указатель на интерфейс ID3DXInclude. Этот интерфейс разработан для тех приложений, которым требуется переопределить устанавливаемое по умолчанию поведение включения. В общем случае поведение по умолчанию замечательно работает и поэтому мы игнорируем данный параметр, передавая в нем null.
Flags — Необязательные флаги компиляции шейдеров из файла эффекта; если флаги не нужны, укажите 0. Можно использовать следующие значения:
D3DXSHADER_DEBUG — Приказывает компилятору включать в скомпилированный файл отладочную информацию.
D3DXSHADER_SKIPVALIDATION — Приказывает компилятору не выполнять проверку корректности кода. Этот флаг следует использовать только при работе с теми шейдерами в правильности кода которых вы абсолютно уверены.
D3DXSHADER_SKIPOPTIMIZATION — Приказывает компилятору не выполнять оптимизацию кода. Обычно этот флаг используется при отладке, когда вы не хотите, чтобы компилятор вносил какие-либо изменения в код.
pPool — Необязательный указатель на интерфейс ID3DXEffectPool, используемый для определения того, как параметры эффекта будут совместно использоваться несколькими экземплярами эффекта. В этой книге в данном параметре мы всегда указываем null, сообщая тем самым что параметры не будут совместно использоваться несколькими файлами эффектов.
ppEffect — Возвращает указатель на интерфейс ID3DXEffect, представляющий созданный эффект.
ppCompilationErrors — Возвращает указатель на интерфейс ID3DXBuffer, содержащий строку с кодами обнаруженых при компиляции ошибок и их описанием.
Вот пример вызова функции D3DXCreateEffectFromFile:
//
// Создание эффекта
//
ID3DXEffect* Effect = 0;
ID3DXBuffer* errorBuffer = 0;
hr = D3DXCreateEffectFromFile(
Device, // связанное устройство
"effect.txt", // имя исходного файла
0, // нет объявлений препроцессора
0, // нет интерфейса ID3DXInclude
D3DXSHADER_DEBUG, // флаги компиляции
0, // параметры не используются совместно
&Effect, // возвращает результат
&errorBuffer); // возвращает строку с ошибками
// Выводим любые сообщения об ошибках
if( errorBuffer )
{
::MessageBox(0, (char*)errorBuffer->GetBufferPointer(), 0, 0);
d3d::Release<ID3DXBuffer*>(errorBuffer);
}
if(FAILED(hr))
{
::MessageBox(0, "D3DXCreateEffectFromFile() - FAILED", 0, 0);
return false;
}
| netlib.narod.ru | < Назад | Оглавление | Далее > |