C# WPF中DirectX11中的SharpDX 2.5

C# WPF中DirectX11中的SharpDX 2.5,c#,wpf,xaml,directx-11,sharpdx,C#,Wpf,Xaml,Directx 11,Sharpdx,我正在尝试在WPF中使用SharpDX 2.5实现DirectX 11。 遗憾的是,不能正确使用SharpDX 2.5。我也无法将WPFHost DX10示例移植到DX11,此示例的完整代码包已关闭: 有人能提出另一种实现方法吗?您仍然可以使用 为了正确使用SharpDX 2.5.0,您需要进行一些修改 1) 在project Sharp.WPF中,类DXUtils.cs中的方法 Direct3D11.Buffer CreateBuffer<T>(this Direct3D11.De

我正在尝试在WPF中使用SharpDX 2.5实现DirectX 11。 遗憾的是,不能正确使用SharpDX 2.5。我也无法将WPFHost DX10示例移植到DX11,此示例的完整代码包已关闭:

有人能提出另一种实现方法吗?

您仍然可以使用

为了正确使用SharpDX 2.5.0,您需要进行一些修改

1) 在project Sharp.WPF中,类DXUtils.cs中的方法

Direct3D11.Buffer CreateBuffer<T>(this Direct3D11.Device device, T[] range)
刚过

stream.WriteRange(range);
所以固定方法如下所示:

public static Direct3D11.Buffer CreateBuffer<T>(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,
            });
        }
    }
进入这个

  m_device.ImmediateContext.Rasterizer.SetViewport(new Viewport(0, 0, w, h, 0.0f, 1.0f));
i、 e.将视口设置为SetViewport

现在它应该可以工作了。

SharpDX通过支持WPF

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

  • MiniCube.WPF
    -演示基本的SharpDX WPF集成
  • MiniCube.SwitchContext.WPF
    演示了当游戏实例的生存期与SharpDXElement的生存期不同时的基本场景(换句话说,当需要在另一个曲面上切换游戏渲染时)
  • MiniCube.SwitchContext.WPF.MVVM
    -同上,但更多的是“MVVM方式”

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

为什么不能移植DX10示例?细节会帮助别人帮助你。还有一个类似的问题:指向SharpDXElement的链接被破坏。请更新它们。另外,我很难找到toolkit.sln或任何以WPF命名的项目。
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));