在 Visual Studio 2017 中禁用内置 HLSL 编译器?

Disable built-in HLSL Compiler in Visual Studio 2017?

我正在尝试在我的 c++ 项目中使用 Direct2D 中的自定义效果,该项目包含在 c#/XAML 解决方案中。我一直在尝试从 D2DCustomEffects solution from the Windows-universal-samples git repo.

改编 CustomPixelShader 项目

我的问题(我认为)是他们在项目解决方案中配置一个自定义构建步骤来让 fxc 编译着色器。当我试图模仿他们的配置时,我注意到在我的项目 属性 页面中我有一个额外的 属性 - HLSL 编译器 - 在 CustomPixelShader 示例项目中不存在(见图)。

当我尝试构建项目而不尝试配置 HLSL 编译器时,出现错误

Error   X1507   failed to open source file: 'd2d1effecthelpers.hlsli'

这是一个在自定义效果示例中明确指出对着色器编译很重要的文件。 d2d1effecthelpers.hlsli 的路径包含在自定义构建步骤配置中,我已检查该文件是否存在。但是,如果我将 d2d1effecthelpers.hlsli 的路径添加到 HLSL 编译器配置中的附加包含目录,该错误消息就会消失,但我会遇到其他问题。我将其解释为好像 HLSL 编译器试图编译着色器,即使我真的想使用自定义构建步骤来代替它。

我的问题是:是否可以以任何方式禁用Visual Studio HLSL 编译器?我注意到,如果我从项目中排除任何着色器文件,HLSL 编译器将从项目 属性 页面中消失,但如何手动执行此操作?

或者,是否有任何关于 Visual Studio 内置 HLSL 编译器的文档?我还没有真正找到任何。我已尝试但未能让 HLSL 编译器根据与示例中的自定义构建步骤相同的规则进行构建。

我正在使用 Visual Studio Community 2017 v 15.3.5。

首先是Visual StudioHLSL编译器其实就是fxc。如果您想将着色器手动编译为自定义构建步骤的一部分,那么您可以禁用 hlsl 编译,执行以下步骤:右键单击解决方案资源管理器中的 .hlsl 文件; select "Properties" 在上下文菜单中;将配置属性 -> 常规 -> 项目类型条目从 HLSL compiler 更改为 TextDoes not participate in build;

我在另一个论坛 (link to answer) 得到了答案。

总结:在 Visual Studio 的解决方案资源管理器中右键单击 .hlsl 文件。这将导致显示该文件的属性。在 Configuration Properties -> General 下,您可以将 Item Type 更改为 "HLSL Compiler" 以外的内容。将其更改为 "Text" 对我有用,其他论坛的答案中建议使用 "Does not participate in build" 。如果这不起作用,将 Exclude 的值从 build 更改为 "No" 可能会起作用。对我来说,只需更改 .hlsl 文件的项目类型就足够了。

这应该会导致 HLSL 编译器从项目 属性 页中消失(参见问题中的图像),并且 HLSL 编译器不会尝试编译 .hlsl 文件。