我正在WPF中构建一个自定义UI框架,我基本上尽可能地放弃了内置的布局系统和控件。到目前为止,我一直在从UIElement
直接分支出来,但由于我已经在进行测量,安排和渲染自己,我想我可以通过“更接近金属”来切掉更多的WPF遗产(特别是在布局/渲染方面)。保持托管代码并且不害怕自己从事肮脏的工作有多接近?
我正在玩一个原型概念,现在我只有一个继承自UIElement的元素:一个Root
对象,类似于一个被剥离的Canvas
,它“托管”剩下的我的布局引擎和渠道相关IInputElement
带来了好处。从那时起,所有元素都将是完全自定义的对象,不会从WPF中的任何内容继承,而是直接呈现到Root的DrawingContext
(在其OnRender
方法中)。
现在我想知道拥有WriteableBitmap
根元素的相对性能,并手动绘制到该元素,例如使用WriteableBitmapEx以方便使用。没有抗锯齿不是问题,也不是自定义命中测试系统。
我的想法主要是WriteableBitmap(Ex)没有任何GPU加速增益的特权,因此当需要重新绘制/转换大区域时,它会慢得多。
我确实对“引擎中基于像素的渲染引擎”有其他需求,所以我仍然对此有所了解。
任何见解?
编辑:那么SharpDX在这方面呢?也许一旦我在这里,我可能会选择一个像SharpDX这样的DirectX包装器的WinForms解决方案(..或..我想我真正应该做的是注册整个C ++ enchilada ,但遗憾的是我没有时间开始在事物中学习那个 ..
答案 0 :(得分:4)
WriteableBitmapEx非常快,即使它只是在CPU上运行。它用于这个高性能图表控件:http://www.scichart.com
你也应该检查Direct3D。您可以获得非常好的性能,但这实际上取决于它的使用方式,并且大多数绘制操作都是缓存的,并且CPU-GPU通信尽可能的方式。