宏声明为:

macro NAME(argument1, argument2, ...)
  ...
endmacro

在宏中,所有出现的 argument1 都将替换为宏调用时传递的参数,包括宏中的 hlsl 块。

无法取消定义宏,但可以选择性地定义宏:

define_macro_if_not_defined NAME(argument1)
  ...
endmacro

如果之前没有定义过宏 NAME ,它将只定义宏 NAME

我们有一些关于宏的命名约定:

  • INIT_... 宏中不应包含任何 hlsl 代码。

  • 如果您的宏包含其他宏, USE_...INIT_... 宏应相应地分开。