在 HLSL 中,可以使用以下类型的预处理器指令来向 着色器在 GPU 上运行的程序。 更多信息
参见 词汇表 编译器提供信息
#pragma
#define_for_platform_compiler
#pragma
指令向着色器编译器提供其他类型的预处理器指令未涵盖的附加信息。
您可以在 HLSL 代码中的任何位置放置 #pragma
指令,但通常习惯将其放在开头,如下所示
#pragma target 3.0
#pragma exclude_renderers vulkan
#pragma vertex vert
#pragma fragment frag
// The rest of your HLSL code goes here
#pragma
指令的使用有一些限制
#if
) 指令中使用 #pragma
指令,如果表达式仅依赖于#define
指令SHADER_API_MOBILE
、SHADER_API_DESKTOP
、UNITY_NO_RGBM
、UNITY_USE_NATIVE_HDR
、UNITY_FRAMEBUFFER_FETCH_AVAILABLE
、UNITY_NO_CUBEMAP_ARRAY
UNITY_VERSION
宏.shader
文件以及使用 #include_with_pragmas
指令包含的文件中使用 Unity 特定的 #pragma
指令。Unity 不支持在使用 #include
指令包含的文件中使用它们;编译器会忽略它们。#include
指令包含的文件中使用标准 HLSL #pragma
指令。Unity 不支持在 .shader
文件中或使用 #include_with_pragmas
指令包含的文件中使用它们;编译器会忽略它们。
注意:如果着色器文件使用 #include
导入包含 #include_with_pragmas
指令的文件,Unity 将忽略 #include_with_pragmas
指令引用的文件中的 #pragma
指令。
在着色器代码中使用 #define_for_platform_compiler
指令向着色器编译器发送 #define
指令。
例如,#define_for_platform_compiler EXAMPLE_SYMBOL
向着色器编译器发送一个 #define EXAMPLE_SYMBOL
指令,该指令定义一个名为 EXAMPLE_SYMBOL
的符号。有关着色器编译器使用的符号的更多信息,请参阅外部着色器编译器文档,例如 Microsoft 对 FXC 编译器的文档。
Unity 预处理器不使用使用 #define_for_platform_compiler
定义的符号,因此您不能在自己的着色器代码中使用这些符号。例如,在上面的示例中,如果您在 #if (EXAMPLE_SYMBOL)
语句内添加着色器代码,则该代码将不会运行。