HLSL 帮助程序

为了帮助效果作者编写可链接像素着色器,d2d1effecthelpers.hlsli 以帮助程序方法和宏的形式定义了一组 HLSL 语言扩展。

若要将 d2d1effecthelpers.hlsli 添加到项目,请在 HLSL 文件中添加 #include 语句。 d2d1effecthelpers.hlsli 与其他 Direct2D 标头(如 d2d1.h)位于同一位置;可以通过将宏 $ (WindowsSDK_IncludePath) 添加到“其他包含目录”属性,从 HLSL 文件的属性页引用它。 请注意,#include 语句必须在定义任何预处理器指令(例如D2D_INPUT_COUNT)之后出现。

#include <d2d1effecthelpers.hlsli>

Direct2D 不支持链接计算或顶点着色器。 但是,如果效果同时使用顶点着色器和像素着色器,则仍可链接像素着色器的输出。

预处理器指令

需要预处理器指令来传达有关效果的信息。 这包括输入数和每个输入的采样类型。 如果适用,应在相关着色器入口点上方的效果着色器代码中定义以下值。

  • D2D_INPUT_COUNT <N> :声明效果的纹理输入数。 如果效果具有可变数量的输入,则必须将此值适当地限定为每个着色器入口点。 必须定义此值。
  • D2D_INPUT<N>_SIMPLE :声明第 N 个输入以使用简单采样。 如果未定义,则第 N 个输入默认为复杂。 定义此值是可选的。
  • D2D_INPUT<N>_COMPLEX :声明第 N 个输入以使用复杂采样。 如果未定义,则第 N 个输入默认为复杂。 定义此值是可选的。
  • D2D_REQUIRES_SCENE_POSITION :指示着色器函数调用使用场景位置值 (即 D2DGetScenePosition 帮助程序函数) 的帮助程序方法。 仅在必要时才应包含此参数,因为每个链接着色器只能有一个函数使用此参数。 定义此值是可选的。
  • D2D_CUSTOM_ENTRY :指示像素着色器函数使用自定义顶点着色器的输出,从而声明其输入参数。 所有自定义顶点着色器输入都使用复杂采样,并且不能使用另一个着色器函数的输出 (即它们只是可链接) 后。 定义此值是可选的。

例如:

#define D2D_INPUT_COUNT 3
#define D2D_INPUT0_SIMPLE
#define D2D_INPUT1_SIMPLE
#define D2D_INPUT2_COMPLEX
#include <d2d1effecthelpers.hlsli>
          

Helper 函数

帮助程序函数用作某些本机 HLSL 内部函数的替代。 在编译时,Direct2D 会根据编译目标类型 (完整着色器或导出函数) 将这些帮助程序函数重新定义为适当的版本。

帮助程序函数:

D2DGetInput
D2DSampleInput
D2DSampleInputAtOffset
D2DSampleInputAtPosition
D2DGetInputCoordinate
D2DGetScenePosition
D2D_PS_ENTRY

效果着色器链接