我正在 WPF 中创建类似 Paint 的应用程序。我想在那里有图层、历史、效果选项等。但是,我认为 Canvas/InkCanvas 的标准方法对于复杂图像来说太慢了。我考虑创建 XNA 项目并将其嵌入到 WPF 应用程序中以使用现代 GPU 的功能(xna 项目就像绘制画布空间)。这不是坏主意吗?是否可以在一个项目中在 WPF 和 XNA 之间进行通信?
问问题
374 次
1 回答
3
这是一个坏主意。几个原因:
WPF 有自己的内置硬件加速(见这里)。您不需要使用 XNA 来获得硬件加速。
XNA 专为实时 3D 渲染而设计。像素操作是它的弱点——直接读/写像素会失去它的大部分性能优势。请注意,您会发现很难避免进行昂贵的像素读取,因为 XNA 的渲染目标可能会“丢失”。
XNA 将提高合成层的性能(但您也可以为此使用 WPF)。它可以提高应用大型全图像效果的性能——但是,有些全图像效果只能在 CPU 上合理地完成。
XNA 对最大纹理大小和目标平台的硬件功能等施加了限制。
您可能不需要像您想象的那样多的性能。您将 XNA 用于以每秒 60 帧连续运行的游戏。图像编辑器不需要那么快。全图像效果操作可以承受相对较长的时间。交互式绘画操作不必一次更新整个图像 - 因此即使在 CPU 上也会很快。
要回答您的最后一个问题 - 是的,您可以在 WPF 中嵌入 XNA。虽然这很棘手 - 琐碎的方法涉及从 XNA 到 WPF 的非常慢的缓冲区复制。这是一个声称可以快速完成的项目。
于 2012-10-01T15:00:40.477 回答