【发布时间】:2015-10-08 18:21:54
【问题描述】:
我正在尝试在 C# 类库中构建像素着色器。
我已将 fx 文件添加到项目中。由于找不到任何合适的构建操作,我尝试手动编辑 csproj:
<FxCompile Include="MyEffect.fx">
<ShaderType>Pixel</ShaderType>
</FxCompile>
但是当我尝试定位 ps 文件时,我得到了System.IO.IOException: Cannot locate resource 'MyEffect.ps'
这是引发错误的代码:
public class MyEffect : ShaderEffect
{
public MyEffect(){
this.PixesShader = new Uri("pack://application:,,,/WpfControlLibrary1;component/MyEffect.ps");
}
}
如何设置我的项目以便我可以找到编译后的着色器?
我找到的所有教程都是针对 C++ 项目或处理自定义构建任务等旧工具的,但我认为从 VS2012 开始就不需要了。
编辑: Visual Studio 仅在 C++ 项目中编译 .fx 文件。在 C# 项目中它不起作用。这里提到了:http://blogs.msdn.com/b/chuckw/archive/2012/05/07/hlsl-fxc-and-d3dcompile.aspx
【问题讨论】:
-
任何添加到cs项目的文件都会有一个名为
Build Action的属性,它应该是Resource。看起来您对其进行了编辑以使用编译,这当然行不通。除非您完全了解您所做的工作,否则您不应直接编辑项目文件。您的代码看起来不错,我认为问题只是因为Build Action设置为Compile,这是错误的。 -
好吧,我已将其设置为
FxCompile,而不是Compile。我在一些 cpp 项目中注意到FxCompile。构建操作Resource不起作用,因为必须先将 .fx 文件编译为 .ps 文件并将其添加到资源中。请注意,资源名称是MyEffect.ps而不是MyEffect.fx -
我告诉你将其
Build Action设置为Resource是文件.ps。顺便说一句,我什至编写了一个仅包含自定义效果的简单库,并且我确信.ps文件应该将Build Action设置为Resource。您对 csproject 文件所做的操作应该回滚(以确保它不会影响您接下来的操作)。如果可能,请尝试再次创建一个新项目。 -
但我还没有 .ps 文件。所以你是说我必须使用 fxc.exe 手动编译 hlsl?
-
是的,其实我用的是
Shazzam(支持HLSL编辑器和预览)。所以你想让VS编译HLSL源代码?据我所知 VS 2012 不能做到这一点,不确定新版本。或者它可能带有一些帮助这样做的插件。
标签: wpf msbuild directx csproj pixel-shader