运行 如果仅修改着色器代码,SPIR-V 编译器将作为 VS2017 中的预构建事件
Running SPIR-V compiler as pre-build event in VS2017 if only the shader code was modified
所以我在这里查看了一些搜索后弹出的问题,但我仍然没有成功。
我的项目有两个文件,main.cpp
和 shader.comp
。
着色器需要在主程序 运行 之前编译,我有一个小的 .bat
脚本可以做到这一点。它设置为 运行 作为预构建事件。
但是,如果我编辑 shader.comp
并保留 main.cpp
自上次 运行 项目以来未修改,则无需重建项目(无论如何根据 VS),所以不需要 运行 任何预构建事件,我的着色器不会被编译。
有没有办法告诉VS2017(或VS2019),如果某个文件被修改,那么运行 某事 ,或者至少是一种将任意文件添加到 VS 在决定是否 运行 构建时检查的文件列表的方法?
我尝试在文件属性中将 "Exclude from build" 设置为 "No",但无论我选择什么 "Item type",仅编辑着色器都不会触发重建。
也许您可以从 那里得到一些帮助。您可以为 VS Up-To-Date check
.
指定文件
<Project...>
...
<ItemGroup>
<UpToDateCheckInput Include="shader.comp" /> <!--when this file is in the project folder-->
<!--<UpToDateCheckInput Include="path/shader.comp" />-->
</ItemGroup>
</Project>
并将此脚本放入您的项目文件中。然后,如果 shader.comp
文件有任何更改,VS 将构建您的项目。
注意:这样,如果只更改shader.comp
文件,但不更改源文件(xx,cpp),构建将开始,但vs 将跳过 C++ 源代码的编译目标。只有当你修改源代码main.cpp时,VS才会运行预构建事件并编译代码。让我知道这是否是您想要的,希望我没有误解任何东西:)
可以在文件的属性中将需要编译的shader定义为Custom Build Tool
(如Item Type
)。这将在属性中打开另一个菜单,其中可以编写 cmd 脚本和类似内容。
在此特定情况下,Command Line
的值为:
glslangValidator.exe -V -o "%(RootDir)%(Directory)%(Filename).spv" "%(FullPath)"
和 Outputs
:
%(RootDir)%(Directory)%(Filename).spv
简而言之,如果 Outputs
中定义的文件不存在或早于此 属性(需要编译的文件)的所有者,则 Command Line
cmd 中的参数将是 运行。
Official documentation 对此有更多信息。
所以我在这里查看了一些搜索后弹出的问题,但我仍然没有成功。
我的项目有两个文件,main.cpp
和 shader.comp
。
着色器需要在主程序 运行 之前编译,我有一个小的 .bat
脚本可以做到这一点。它设置为 运行 作为预构建事件。
但是,如果我编辑 shader.comp
并保留 main.cpp
自上次 运行 项目以来未修改,则无需重建项目(无论如何根据 VS),所以不需要 运行 任何预构建事件,我的着色器不会被编译。
有没有办法告诉VS2017(或VS2019),如果某个文件被修改,那么运行 某事 ,或者至少是一种将任意文件添加到 VS 在决定是否 运行 构建时检查的文件列表的方法?
我尝试在文件属性中将 "Exclude from build" 设置为 "No",但无论我选择什么 "Item type",仅编辑着色器都不会触发重建。
也许您可以从 Up-To-Date check
.
<Project...>
...
<ItemGroup>
<UpToDateCheckInput Include="shader.comp" /> <!--when this file is in the project folder-->
<!--<UpToDateCheckInput Include="path/shader.comp" />-->
</ItemGroup>
</Project>
并将此脚本放入您的项目文件中。然后,如果 shader.comp
文件有任何更改,VS 将构建您的项目。
注意:这样,如果只更改shader.comp
文件,但不更改源文件(xx,cpp),构建将开始,但vs 将跳过 C++ 源代码的编译目标。只有当你修改源代码main.cpp时,VS才会运行预构建事件并编译代码。让我知道这是否是您想要的,希望我没有误解任何东西:)
可以在文件的属性中将需要编译的shader定义为Custom Build Tool
(如Item Type
)。这将在属性中打开另一个菜单,其中可以编写 cmd 脚本和类似内容。
在此特定情况下,Command Line
的值为:
glslangValidator.exe -V -o "%(RootDir)%(Directory)%(Filename).spv" "%(FullPath)"
和 Outputs
:
%(RootDir)%(Directory)%(Filename).spv
简而言之,如果 Outputs
中定义的文件不存在或早于此 属性(需要编译的文件)的所有者,则 Command Line
cmd 中的参数将是 运行。
Official documentation 对此有更多信息。