包含此页的版本:
不含此页的版本:
在 HLSL 中,可以使用以下类型的预处理器指令向着色器在 GPU 上运行的程序。更多信息
请参阅术语表编译器:
#pragma#define_for_platform_compiler
#pragma指令向着色器编译器提供其他类型的预处理器指令未涵盖的其他信息。
你可以把#pragma指令,但将它们放在开头是一种常见的约定,如下所示:
#pragma target 3.0
#pragma exclude_renderers vulkan
#pragma vertex vert
#pragma fragment frag
// The rest of your HLSL code goes here
使用有一些限制#pragma指令:
#pragma条件 (#if) 指令,如果表达式仅依赖于:#define您自己的代码中的指令SHADER_API_MOBILE,SHADER_API_DESKTOP,UNITY_NO_RGBM,UNITY_USE_NATIVE_HDR,UNITY_FRAMEBUFFER_FETCH_AVAILABLE,UNITY_NO_CUBEMAP_ARRAY
UNITY_VERSION宏#pragma指令中的.shader文件,并在您包含在#include_with_pragmas命令。Unity 在包含在#include命令;编译器忽略它们。#pragma指令包含在#include命令。Unity 不支持.shader文件,或包含在#include_with_pragmas命令;编译器忽略它们。
注意:如果着色器文件使用#include导入包含#include_with_pragmas指令,Unity 忽略#pragma指令#include_with_pragmas指令引用。
使用#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)语句,则代码将不会运行。