硬件加速在MFC
本文关键字:MFC 硬件加速 | 更新日期: 2023-09-27 18:06:13
我目前正在开发一个软件,它涉及到图形和图表形式的性能指标的实时渲染。我需要获取数据,处理数据,并尽可能快地渲染图像。我的后端是用c++编写的,现在我必须对前端做出选择。考虑到我的后端是c++,我倾向于使用MFC。另一种选择是使用WPF c#作为前端,并与我的c++后端进行互操作。我最近读到WPF提供硬件加速,这应该有助于我实现高帧率。MFC硬件也能加速它的图形吗?硬件加速真的重要吗?考虑到WPF的硬件加速,在我的情况下,这是否使WPF成为最有效的图形替代方案?
我相信WPF使用DirectX 9提供硬件加速。然而,对于线形图,限制因素是界面元素的数量。我们正在WPF中创建一个程序,使用Telerik图表实时显示肌电信号数据。这些可以配置为在引擎盖下使用direct2d加速,如果你有很多数据点,这会提高性能。它仍然是不稳定的,因为你不能控制WPF的渲染线程。
这取决于你在图中需要多少特征。如果优先考虑的是流畅的实时显示,请不要使用WPF。
Visual Studio 2010为MFC添加了类,以支持在MFC程序中使用Direct2D渲染。
要使用Direct2D,您首先在视图的OnCreate
中调用EnableD2DSupport()
(从技术上讲,我想它不必在OnCreate
中,但这是通常的地方)。然后,当D2D显示上下文需要更新时,您将收到AFX_WM_DRAW2D
消息,因此您通常需要为此添加处理程序,并根据需要呈现您的内容来响应它。
另一种考虑的可能性是使用现有的控件来绘制图形。有很多这样的软件,其中一些是免费的,有相当自由的许可。例如,CodeProject有许多图表控件,其中一些使用D2D进行绘制,而更多的则不使用。
老实说,我有点惊讶于图表的信息更新速度足以使绘制速度产生巨大的变化。在大多数典型情况下,真正的限制将是用户理解你所画内容的能力。用户不可能看到100个不同的图表以60hz的频率更新,也不可能从大多数图表中获得真正的意义。在大多数情况下,真正的挑战不是更快地绘制更多的数据,而是为用户提供更好的方法,让他们一次专注于他们可以关注的少数事情,以及(例如)在需要时将他们的注意力吸引到重要的更改上。