我正在尝试在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
答案 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);