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

指向确定着色器指令集的着色器配置文件的指针。 有关可用配置文件的列表,请参阅 D3DXGetVertexShaderProfileD3DXGetPixelShaderProfile

Flags [in]

类型: DWORD

由各种标志标识的编译选项。 Direct3D 10 HLSL 编译器现在是默认编译器。 有关详细信息 ,请参阅 D3DXSHADER 标志

ppShader [out, retval]

类型: LPD3DXBUFFER*

包含已编译着色器的缓冲区。 编译器着色器是 DWORD 数组。 有关访问缓冲区的详细信息,请参阅 ID3DXBuffer

ppErrorMsgs [out, retval]

类型: LPD3DXBUFFER*

缓冲区至少包含发生的第一条编译错误消息。 这包括效果编译器错误和高级语言编译错误。 有关访问缓冲区的详细信息,请参阅 ID3DXBuffer

ppConstantTable [out]

类型: LPD3DXCONSTANTTABLE*

返回 ID3DXConstantTable 接口,该接口可用于访问着色器常量。 此值可以为 NULL。 如果将应用程序编译为大地址感知 (即,使用 /LARGEADDRESSAWARE 链接器选项来处理大于 2 GB) 的地址,则不能使用此参数,必须将其设置为 NULL。 相反,必须使用 D3DXGetShaderConstantTableEx 函数检索嵌入到着色器中的着色器常量表。 在此 D3DXGetShaderConstantTableEx 调用中,必须将 D3DXCONSTTABLE_LARGEADDRESSAWARE 标志传递给 Flags 参数,以指定以访问最多 4 GB 的虚拟地址空间。

返回值

类型: 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