6

我正在 WPF 中构建一个自定义 UI 框架,我基本上尽可能多地抛弃内置布局系统和控件。到目前为止,我一直在UIElement直接分支,但由于我已经在进行测量、安排和渲染自己,我想我可以通过“更接近金属”(尤其是当它来布局/渲染)。留在托管代码中并且不害怕自己做肮脏的工作时有多接近?

我现在正在玩弄一个原型概念,我只有一个从 UIElement 继承的元素:一个Root对象,类似于一个剥离的对象Canvas,它“托管”我的布局引擎的其余部分并将相关的IInputElement好处引入其中。从那时起,所有元素都将是完全自定义的对象,不继承自 WPF 中的任何内容,而是直接呈现到DrawingContextRoot 中(在其OnRender方法中)。

现在我想知道拥有一个根元素并手动绘制它的相对性能,例如为了方便WriteableBitmap使用WriteableBitmapEx 。没有抗锯齿不是问题,自定义命中测试系统也不是问题。

我的想法主要是 WriteableBitmap(Ex) 没有任何 GPU 加速增益的特权,因此当需要重新绘制/转换大面积区域时会[非常]慢。

不过,我确实对“引擎中的基于像素的渲染引擎”有其他需求,因此我仍然对此感兴趣。

有什么见解吗?

编辑:在这种情况下,SharpDX 呢?也许一旦我这样做了,我还不如去使用像 SharpDX 这样的 DirectX 包装器的 WinForms 解决方案(..or.. 我想我真正应该做的是注册整个 C++ enchilada,但不幸的是我没有有时间在事情中开始学习)..

4

1 回答 1

5

WriteableBitmapEx 非常快,即使它只是在 CPU 上运行。它用于这种高性能图表控件:http ://www.scichart.com

您还应该检查 Direct3D 确实。您可以获得非常好的性能,但这实际上取决于它的使用方式以及大多数绘制操作被缓存以及 CPU-GPU 通信尽可能允许。

于 2013-12-22T19:27:37.037 回答