Поделиться через


Метод ID3DXEffectCompiler::CompileShader

Компилирует шейдер из эффекта, содержащего одну или несколько функций.

Синтаксис

HRESULT CompileShader(
  [in]          D3DXHANDLE          hFunction,
  [in]          LPCSTR              pTarget,
  [in]          DWORD               Flags,
  [out, retval] LPD3DXBUFFER        *ppShader,
  [out, retval] LPD3DXBUFFER        *ppErrorMsgs,
  [out]         LPD3DXCONSTANTTABLE *ppConstantTable
);

Параметры

hFunction [in]

Тип: D3DXHANDLE

Уникальный идентификатор компилируемых функций. Это значение не должно иметь значение NULL. См. раздел Дескрипторы (Direct3D 9).

pTarget [in]

Тип: LPCSTR

Указатель на профиль шейдера, определяющий набор инструкций шейдера. Список доступных профилей см. в разделе D3DXGetVertexShaderProfile или D3DXGetPixelShaderProfile .

Флаги [in]

Тип: DWORD

Параметры компиляции, определенные различными флагами. Компилятор Direct3D 10 HLSL теперь используется по умолчанию. Дополнительные сведения см. в разделе Флаги D3DXSHADER .

ppShader [out, retval]

Тип: LPD3DXBUFFER*

Буфер, содержащий скомпилированный шейдер. Шейдер компилятора представляет собой массив DWORD. Дополнительные сведения о доступе к буферу см. в разделе ID3DXBuffer.

ppErrorMsgs [out, retval]

Тип: LPD3DXBUFFER*

Буфер, содержащий по крайней мере первое сообщение об ошибке компиляции. Сюда входят ошибки компилятора эффектов и высокоуровневые ошибки компиляции языка. Дополнительные сведения о доступе к буферу см. в разделе ID3DXBuffer.

ppConstantTable [out]

Тип: LPD3DXCONSTANTTABLE*

Возвращает интерфейс ID3DXConstantTable , который можно использовать для доступа к константам шейдера. Это значение может иметь значение NULL. Если вы компилируете приложение с учетом большого адреса (т. е. используете параметр компоновщика /LARGEADDRESSAWARE для обработки адресов размером более 2 ГБ), этот параметр использовать нельзя, и ему необходимо присвоить значение NULL. Вместо этого необходимо использовать функцию D3DXGetShaderConstantTableEx , чтобы получить таблицу констант шейдера, внедренную в шейдер. В этом вызове D3DXGetShaderConstantTableEx необходимо передать флаг D3DXCONSTTABLE_LARGEADDRESSAWARE параметру Flags , чтобы указать для доступа до 4 ГБ виртуального адресного пространства.

Возвращаемое значение

Тип: HRESULT

Если метод выполнен успешно, возвращаемое значение будет S_OK.

Если аргументы недопустимы, метод возвращает D3DERR_INVALIDCALL.

Если метод завершается сбоем, возвращаемое значение будет E_FAIL.

Комментарии

Целевые объекты можно указать для вершинных шейдеров, пиксельных шейдеров и функций заливки текстур.

Цели Функции
Целевые объекты вершинного шейдера vs_1_1, vs_2_0, vs_2_sw, vs_3_0
Целевые объекты шейдера пикселей ps_1_1, ps_1_2, ps_1_3, ps_1_4, ps_2_0, ps_2_sw, ps_3_0
Целевые объекты заливки текстуры tx_0, tx_1

 

Этот метод компилирует шейдер из функции, написанной на C-подобном языке. Подробнее: HLSL.

Требования

Требование Значение
Заголовок
D3DX9Effect.h
Библиотека
D3dx9.lib

См. также раздел

ID3DXEffectCompiler

D3DXGetShaderConstantTable