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

标签 wpf msbuild directx csproj pixel-shader

我正在尝试在 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

最佳答案

您可以设置一个 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);

关于wpf - 如何在 csproj 中构建着色器效果 (.fx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33023231/

相关文章:

c# - 构建许多 C# 项目时 Visual Studio Build Avoidance

c++ - 如何从 ID3DXEffect 获取所有着色器常量(统一)?

c# - 如何在例程中使用 MVVM 更新 UI 中的属性

c# - 替换本地 : keyword with a path? 的适当方法是什么

wpf - 如何将粗体文本和 AccessText 添加到标签或 TextBlock?

wpf - 更改 WPF 窗口的启动位置

c# - 在 Travis CI 上使用 Mono 5.14.0.177、msbuild 15.0、nuget 4.7.1 构建失败,但在 VirtualBox 中无法重现

visual-c++ - 如何为 Visual Studio Professional 2017 安装 "Visual C++ Build Tools"

c++ - 多次将具有略微修改的值的相同 D3DXVECTOR3 推回到 vector 中

c++ - D3D 文本占用太多 RAM..?