WPF控件中的SlimDX视口

我正在从WinForms / XNA过渡到WPF / SlimDX,因为:

  • a)WPF相对于WinForms的所有好处(但学习曲线=哎哟!)
  • b)我想将多个SlimDX视口附加到Panels。 XNA有1个“游戏”屏幕。
  • c,最后和最小)DirectX 10支持

我之前的所有XNA代码都在C#中。 我无法弄清楚如何在高级别上将其移植到SlimDX和WPF。 我疯了似的搜索。 我发现的最接近的是:

1) http://www.gamedev.net/community/forums/topic.asp?topic_id=507941许多文章指出了这个讨论,但它不完整,我无法弄清楚XAML,我得到设备错误附加所有遗漏的_slimDXDevice和Window1事件。

2) http://www.codeproject.com/KB/WPF/D3DImage.aspx本文假设用户正在移植C ++。 我正在移植非常接近MDX代码的XNA代码。

如果我能够获得一个带有自定义SlimDX驱动视口的WPF表单只是一个蓝色框,我可以从那里开始。 在XNA中,我渲染了许多单独的RenderTargets并将它们全部放在屏幕上,现在我想将它们附加到控件上。 但首先,只有一个蓝盒子! :d

有任何想法吗? 我觉得这很简单,或者有一些我不知道的“千篇一律”代码。 非常感激!

您现在可以查看示例。 它刚刚被检入我们的存储库,所以你需要使用SVN来获取它(或者等到我们发布2010年2月发布):

http://code.google.com/p/slimdx/source/detail?r=1356

D3DImage是您要使用的类。 尽管codeproject教程是C ++,但它非常适用于SlimDX和WPF。

所有与SlimDX有关的都是正常运行代码,但不要在您的设备或交换链上运行Present(…)。 在您放置Present(…)的位置,执行D3DImage.SetBackBuffer(…)并将SlimDX曲面的ComPointer属性发送给它。 然后执行D3DImage.AddDirect(…),你现在在WPF中合成了D3D。

另外,确保你创建了一个IDirect3DDevice9Ex,否则你的性能会比XP更糟糕!

我最近搞乱了D3DImage和SlimDX,并没有发现让它工作太难(使用DirextX9)。 我的家用电脑上有一些代码,我稍后会发布,但它与提供的链接中的代码非常相似。

我从来没有能够使用更高版本的directx。 Jeremiah有一篇很好的博客文章,关于使用directx9设备作为directx 10/11 / d2d和D3DImage之间的链接,但我无法使用Slimdx。 虽然directx9做了我需要它做的事情,但我并没有付出太多的努力,我有点想让它在XP上工作。