1

我正在 WPF 中创建类似 Paint 的应用程序。我想在那里有图层、历史、效果选项等。但是,我认为 Canvas/InkCanvas 的标准方法对于复杂图像来说太慢了。我考虑创建 XNA 项目并将其嵌入到 WPF 应用程序中以使用现代 GPU 的功能(xna 项目就像绘制画布空间)。这不是坏主意吗?是否可以在一个项目中在 WPF 和 XNA 之间进行通信?

4

1 回答 1

3

这是一个坏主意。几个原因:

  • WPF 有自己的内置硬件加速(见这里)。您不需要使用 XNA 来获得硬件加速。

  • XNA 专为实时 3D 渲染而设计。像素操作是它的弱点——直接读/写像素会失去它的大部分性能优势。请注意,您会发现很难避免进行昂贵的像素读取,因为 XNA 的渲染目标可能会“丢失”。

  • XNA 将提高合成层的性能(但您也可以为此使用 WPF)。它可以提高应用大型全图像效果的性能——但是,有些全图像效果只能在 CPU 上合理地完成。

  • XNA 对最大纹理大小和目标平台的硬件功能等施加了限制。

  • 您可能不需要像您想象的那样多的性能。您将 XNA 用于以每秒 60 帧连续运行的游戏。图像编辑器不需要那么快。全图像效果操作可以承受相对较长的时间。交互式绘画操作不必一次更新整个图像 - 因此即使在 CPU 上也会很快。

要回答您的最后一个问题 - 是的,您可以在 WPF 中嵌入 XNA。虽然这很棘手 - 琐碎的方法涉及从 XNA 到 WPF 的非常慢的缓冲区复制。这是一个声称可以快速完成的项目。

于 2012-10-01T15:00:40.477 回答