DX11在非托管C++中创建的设备,用于WPF窗口

本文关键字:用于 窗口 WPF 创建 C++ DX11 | 更新日期: 2023-09-27 18:28:22

我已经使用Direct3d 11在C++中开发一个简单的图形引擎很长时间了。我决定尝试构建一个GUI只是为了好玩,在阅读了一些关于WPF的内容后,我真的很喜欢它。问题是,我不确定我想做的事情是否可能。

我想做的是在WPF应用程序中加载引擎DLL,并在WPF窗口的一部分中使用DX设备。基本上,我想做的类似于地图编辑器(主窗口有一堆控件和一个包含渲染区域(设备)的子窗口),但我不想将我的引擎转换为XNA,而是想将已经在工作的C++代码与WPF一起使用。这可能吗?

此外,我尝试过用Win32创建一个窗口并将设备连接到它,这只是一个简单的问题,只需在创建设备时将窗口HWND分配给设备。我认为WPF窗口也是如此,还是我错了?感谢阅读:)

编辑:忘了说我是C#的新手,但我知道你可以导入C++DLL并使用它的功能,我只是不确定设备-wpf窗口的交互。

DX11在非托管C++中创建的设备,用于WPF窗口

WPF支持嵌入D3D曲面。

从这里开始http://msdn.microsoft.com/en-us/library/system.windows.interop.d3dimage.aspx

WPF主要用于托管代码。托管代码意味着大部分内容都由垃圾收集器处理。正如我从你的文章中看到的,你想集成C++dll,它是非托管代码。在WPF中使用C++库并不是那么简单,但也不是不可能。C#提供了许多其他方面来处理这类场景。

您必须了解互操作性和非托管代码。请查看以下链接:示例项目

对于WPF/D3D11互操作,请查看由Microsoft工程师编写的WPFDXInterop。这允许您在WPF窗口中拥有一个D3D渲染目标,并进行适当的交互。链接中有一个示例项目。