在 HLSL 中,#include
指令是一种预处理器指令。它们指示编译器将一个 HLSL 文件的内容包含到另一个 HLSL 文件中。它们包含的文件称为包含文件。
在 Unity 中,常规的 #include
指令与标准 HLSL 中的工作方式相同。有关常规 #include
指令的更多信息,请参阅 HLSL 文档:include 指令。
Unity 还提供了一个额外的、Unity 特定的 #include_with_pragmas
指令。#include_with_pragmas
指令的工作方式与常规 #include
指令相同,但它还允许您在包含文件中使用 #pragma
指令。这意味着 #include_with_pragmas
指令允许您在多个文件之间共享 #pragma
指令。
注意:要使用 #include_with_pragmas
指令,您必须启用缓存着色器预处理器。
此示例演示了如何使用 Unity 特定的 #include_with_pragmas
指令来启用常见的流程改进:能够在多个着色器中打开和关闭着色器在 GPU 上运行的程序。 更多信息
请参阅词汇表调试,而无需每次都编辑每个着色器源文件。
以下行演示了包含文件的内容。它包含一个启用着色器调试的单个 pragma 指令
// Comment out the following line to disable shader debugging
#pragma enable_d3d11_debug_symbols
在您要调试的每个着色器中,添加一个指向包含文件的 #include_with_pragmas
指令。将指令放在其他 #pragma
指令附近,如下所示
// Example pragma directives
#pragma target 4.0
#pragma vertex vert
#pragma fragment frag
// Replace path-to-include-file with the path to the include file
#include_with_pragmas "path-to-include-file"
// The rest of the HLSL code goes here
现在,当您想要为使用包含文件的所有着色器打开和关闭着色器调试时,您只需要更改包含文件中的单行即可。当 Unity 重新编译着色器时,它会包含修改后的行。
注意:如果着色器文件使用 #include
导入包含 #include_with_pragmas
指令的文件,则 Unity 会忽略 #include_with_pragmas
指令引用的文件中包含的 #pragma
指令。