我正在WPF中构建一个自定义UI框架,在这里我基本上放弃了尽可能多的内置布局系统和控件。到目前为止,我一直没有UIElement
直接涉足,但是由于我已经在进行测量,整理和渲染自己,所以我认为我可以通过甚至“更接近金属”来减少WPF的更多遗产(尤其是当它来的时候)进行布局/渲染)。在保持托管代码的同时又不害怕自己做肮脏的工作的情况下,有多接近?
我现在正在一边玩一个原型概念,在这个概念中,我只有一个元素继承自UIElement:一个Root
类似于剥离的对象Canvas
,它“托管”了我的其余布局引擎,并将相关的IInputElement
利益引入其中。从那时起,所有元素将完全是自定义对象,而不是从WPF中的任何内容继承而来,而是直接呈现到DrawingContext
Root中(在其OnRender
方法中)。
现在,我想知道拥有WriteableBitmap
根元素并手动使用它的相对性能,例如,为了方便起见,使用WriteableBitmapEx。没有抗锯齿不是问题,定制命中测试系统也不是问题。
我的想法主要是WriteableBitmap(Ex)不具有任何GPU加速增益的特权,因此,当需要重绘/变换大面积区域时,WriteableBitmap(Ex)的速度将大大降低。
但是,对于“基于像素的渲染引擎”,我确实还有其他需求,因此我仍然对此感兴趣。
有什么见解吗?
编辑:在这种情况下,SharpDX呢?也许曾经的我在这我还不如去与一个DirectX包装像SharpDX一个WinForms的解决方案(..或..我想我真正应该做的是注册了整个C ++安吉拉卷,但不幸的是我没有有时间开始学习这些东西。..
即使在CPU上运行,WriteableBitmapEx也相当快。此高性能图表控件中使用了它:http : //www.scichart.com
您还应该确实检出Direct3D。您可以获得非常好的性能,但这实际上取决于它的使用方式以及大多数绘图操作是否已缓存,并且CPU-GPU通讯尽可能地方便。