我正在 WPF 中构建一个自定义 UI 框架,我基本上尽可能多地抛弃内置布局系统和控件。到目前为止,我一直在UIElement
直接分支,但由于我已经在进行测量、安排和渲染自己,我想我可以通过“更接近金属”(尤其是当它来布局/渲染)。留在托管代码中并且不害怕自己做肮脏的工作时有多接近?
我现在正在玩弄一个原型概念,我只有一个从 UIElement 继承的元素:一个Root
对象,类似于一个剥离的对象Canvas
,它“托管”我的布局引擎的其余部分并将相关的IInputElement
好处引入其中。从那时起,所有元素都将是完全自定义的对象,不继承自 WPF 中的任何内容,而是直接呈现到DrawingContext
Root 中(在其OnRender
方法中)。
现在我想知道拥有一个根元素并手动绘制它的相对性能,例如为了方便WriteableBitmap
使用WriteableBitmapEx 。没有抗锯齿不是问题,自定义命中测试系统也不是问题。
我的想法主要是 WriteableBitmap(Ex) 没有任何 GPU 加速增益的特权,因此当需要重新绘制/转换大面积区域时会[非常]慢。
不过,我确实对“引擎中的基于像素的渲染引擎”有其他需求,因此我仍然对此感兴趣。
有什么见解吗?
编辑:在这种情况下,SharpDX 呢?也许一旦我这样做了,我还不如去使用像 SharpDX 这样的 DirectX 包装器的 WinForms 解决方案(..or.. 我想我真正应该做的是注册整个 C++ enchilada,但不幸的是我没有有时间在事情中开始学习)..