如何在csproj中构建着色器效果(.fx)

时间:2015-10-08 18:21:55

标签: wpf msbuild directx csproj pixel-shader

我正在尝试在C#类库中构建像素着色器。

我已将fx文件添加到项目中。由于我找不到任何合适的构建操作,我尝试手动编辑csproj:

let x = ["A", "B", "C", "D"]

let result = Set(
    x.indices
        .flatMap{ x.lazyCombos($0 + 1) }
        .filter{ $0.count >= 2 }
        .flatMap{ $0.permutations() }
        .map{ $0.joinWithSeparator("") })

但是当我尝试找到ps文件时,我得到<FxCompile Include="MyEffect.fx"> <ShaderType>Pixel</ShaderType> </FxCompile>

这是抛出错误的代码:

System.IO.IOException: Cannot locate resource 'MyEffect.ps'

如何设置我的项目以便找到已编译的着色器?

我找到的所有教程都是针对C ++项目或处理旧工具(如自定义构建任务),但我认为自VS2012以来不需要这样做。

修改 Visual Studio仅在C ++项目中编译.fx文件。在C#项目中,它不起作用。这里提到:http://blogs.msdn.com/b/chuckw/archive/2012/05/07/hlsl-fxc-and-d3dcompile.aspx

1 个答案:

答案 0 :(得分:4)

您可以设置Postbuild选项以使用fxc:

编译fx文件
fxc /O0 /Fc /Zi /T  fx_5_0 /Fo myShader.fxo myShader.fx

但是我在开发时会在运行时编译所有着色器。 我不确定您使用的是哪个C#库但是您可以在SharpDX和SlimDX中执行此操作:

ShaderBytecode.CompileFromFile(effectFile, "fx_5_0", ShaderFlags.None, EffectFlags.None);