Csharp/C#教程:SharpFX 2.5在WPF中的DirectX11中分享


SharpFX 2.5在WPF中的DirectX11中

我正在尝试使用SharpDX 2.5将DirectX 11实现到WPF中。 可悲的是https://directx4wpf.codeplex.com/和https://sharpdxwpf.codeplex.com/与SharpDX 2.5无法正常工作。 我也无法将WPFHost DX10示例移植到DX11,并且此示例的完整代码包已关闭: http : //www.indiedev.de/wiki/DirectX_in_WPF_integrieren

有人可以提出另一种实施方式吗?

SharpDX通过SharpDXElement支持WPF。

查看Toolkit.sln的Samples存储库 – 所有名称中包含WPF项目都使用SharpDXElement作为渲染表面:

更新:SharpDX.Toolkit已被弃用,不再维护。 它被移动到一个单独的存储库。 工具包样本已删除,但我将链接更改为仍存在的变更集。

您仍然可以使用https://sharpdxwpf.codeplex.com/ 。

为了与SharpDX 2.5.0一起正常工作,您需要做一些修改。

1)在方法DXUtils.cs类的项目Sharp.WPF中

 Direct3D11.Buffer CreateBuffer(this Direct3D11.Device device, T[] range) 

添加此行

 stream.Position = 0; 

刚过

 stream.WriteRange(range); 

所以固定方法如下所示:

 public static Direct3D11.Buffer CreateBuffer(this Direct3D11.Device device, T[] range) where T : struct { int sizeInBytes = Marshal.SizeOf(typeof(T)); using (var stream = new DataStream(range.Length * sizeInBytes, true, true)) { stream.WriteRange(range); stream.Position = 0; // fix return new Direct3D11.Buffer(device, stream, new Direct3D11.BufferDescription { BindFlags = Direct3D11.BindFlags.VertexBuffer, SizeInBytes = (int)stream.Length, CpuAccessFlags = Direct3D11.CpuAccessFlags.None, OptionFlags = Direct3D11.ResourceOptionFlags.None, StructureByteStride = 0, Usage = Direct3D11.ResourceUsage.Default, }); } } 

2)在文件D3D11.cs的D3D11类中重命名

 m_device.ImmediateContext.Rasterizer.SetViewports(new Viewport(0, 0, w, h, 0.0f, 1.0f)); 

进入这个

  m_device.ImmediateContext.Rasterizer.SetViewport(new Viewport(0, 0, w, h, 0.0f, 1.0f)); 

即SetViewports到SetViewport。

它现在应该工作了。

上述就是C#学习教程:SharpFX 2.5在WPF中的DirectX11中分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/991936.html

(0)
上一篇 2021年12月24日
下一篇 2021年12月24日

精彩推荐