WPF与XNA一起呈现数千个精灵

我需要渲染数千个用线条相互链接的椭圆。 在WPF应用程序中呈现它的最佳方式(在性能方面)是什么。 WPF Canvas的绘画比XNA绘画更糟糕吗?

实际上,隐藏的问题是:是否可以在WPF主机内进行一些xna渲染? 我看到一些使用无边框xna窗口覆盖的示例,但没有原生解决方案……

谢谢,Aurélien

如果做得好,你可以在WPF渲染中获得一些相当高的性能,这样做的好处是你不必采取WPF-XNA互操作的痛苦。 如果使用WPF的低级渲染API(例如CompositionTarget.Rendering和DrawingContext ),则可以渲染(并设置动画)大量的视觉效果。 您还可以利用.net 4.0中新的缓存合成function 。 还有更多只是以此为出发点。

我已经成功地将XNA与WPF“集成”,首先将XNA场景渲染到WinForms控件,然后使用WindowsFormsHost元素在WPF中托管该控件。

我刚刚在CodeProject上发现了这篇文章 :

我们希望将我们的XNA场景集成到WPF用户界面中,就像我们集成canvas或任何小部件一样。 但在XNA中查看3D场景的最佳方法是将其合并到一个窗口中。 使用WinForm可以获得任何WPF控件的句柄是不可能的。 然后诀窍是重写围绕Game类的XNA框架的一部分。 目标是从Panelinheritance一个新的Game类(在我们的例子中是Canvas),以便能够将它包含在WPF可视化树中。 面板的可视界限将是XNA场景的可视区域。 然而,我们刚刚说过,不可能获得一个不从Windowinheritance的可视控件的句柄。 那么我们如何使用XNA显示3D呢​​? 我们只需在面板上方显示一个没有边框的窗口。 当应用程序具有焦点并且面板可见时,此窗口将始终位于顶部,并且在此情况下将隐藏。 同样,当面板不可见时,我们将停止游戏的活动。

Microsoft论坛上的这个post对此进行了讨论,一张海报说明:

然后,结论是您可以将XNA渲染到WPF表单中而没有任何问题,但您必须避免使用Game和GraphicsDeviceManager类,因为后者需要运行Game实例(构造函数被定义为新的GraphicsDeviceManager(游戏游戏))和Game类没有提供任何方法来定义它呈现的窗口。

所以看起来它是可能的,但需要在方程的XNA方面做一些工作。

但请注意,XNA应用程序不能在没有至少1.1着色器GPU的系统上运行。