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

效果着色器链接