【发布时间】:2013-12-21 13:21:00
【问题描述】:
我正在 WPF 中构建一个自定义 UI 框架,我基本上尽可能多地放弃内置布局系统和控件。到目前为止,我一直直接从UIElement 分支出来,但由于我已经在进行测量、安排和渲染自己,我想我可以通过“更接近金属”(尤其是当涉及到布局/渲染时)。留在托管代码中而不害怕自己做脏活的情况下有多接近?
我现在在一边玩弄一个原型概念,我只有一个从 UIElement 继承的元素:一个Root 对象,类似于一个精简的Canvas,它“托管”了我的布局引擎的其余部分和渠道相关IInputElement 受益。从那时起,所有元素都将是完全自定义的对象,不继承自 WPF 中的任何内容,而是直接呈现到 Root 的 DrawingContext(在其 OnRender 方法中)。
现在我想知道拥有 WriteableBitmap 根元素并手动绘制到它的相对性能,例如为了方便使用 WriteableBitmapEx。没有抗锯齿不是问题,自定义命中测试系统也不是问题。
我的想法主要是 WriteableBitmap(Ex) 没有任何 GPU 加速增益的特权,因此当需要重新绘制/转换大面积区域时会 [非常] 慢。
不过,我确实对“引擎中的基于像素的渲染引擎”有其他需求,因此我仍然对此感兴趣。
有什么见解吗?
编辑:那么 SharpDX 在这种情况下呢?也许一旦我这样做了,我还不如去使用像 SharpDX 这样的 DirectX 包装器的 WinForms 解决方案(..or.. 我想我真正应该做的是注册整个 C++ enchilada ,但不幸的是,我没有时间开始学习 的东西)..
【问题讨论】:
-
你摇滚。只是想说。
-
最后,我完全放弃了 WPF 和 .Net,转而学习 C++。然后我从本机代码开始使用 Direct2D,一开始似乎还可以。然后我决定我想要更多的控制,所以我也放弃了 Direct2D,并直接在 Direct3D 11 之上推出了我自己的原生 2D UI 框架。现在我已经足够接近金属了。我现在可以做的还有很多 -而且速度很快。从头开始定制我自己的图形框架可以让我做很多优化。它不如 Direct2D 灵活和扩展,但性能更好。
标签: c# wpf writeablebitmap writeablebitmapex drawingcontext