【问题标题】:Hardware Acceleration in MFCMFC 中的硬件加速
【发布时间】:2014-06-01 22:07:33
【问题描述】:

我目前正在开发一种软​​件,该软件涉及以图形和图表形式实时呈现性能指标。我需要尽可能快地获取数据、处理数据并渲染图像。我的后端是用 C++ 编写的,我正处于必须对前端做出选择的地步。 鉴于我的后端是 C++,我倾向于使用 MFC。另一种选择是使用 WPF C# 作为前端并与我的 C++ 后端互操作。我最近读到 WPF 提供了硬件加速,这应该可以帮助我实现高帧速率。 MFC 硬件是否也可以加速其图形?硬件加速是否重要? 鉴于 WPF 的硬件加速,这是否使 WPF 在我的情况下成为图形的最有效替代方案?

【问题讨论】:

  • 您为什么不使用 OpenGL / DirectX 进行 gpu 加速光栅化的任何特殊原因?
  • 如果我使用 WPF,它不会内部化基于 OpenGL/DirectX 的渲染吗?使用 MFC,我需要自己完成。我不知道这会是怎样,或者会有多困难。
  • 我建议去 XNA。它提供了便于视频游戏开发的托管运行时环境。 en.wikipedia.org/wiki/Microsoft_XNA

标签: c# c++ wpf mfc hardware-acceleration


【解决方案1】:

我相信 WPF 使用 DirectX 9 提供硬件加速。然而,对于折线图,限制因素是界面元素的数量。我们正在 WPF 中创建一个使用 Telerik 图表实时显示 sEMG 数据的程序。这些可以配置为在引擎盖下使用 direct2d 加速,如果您有很多数据点,这会稍微提高性能。但它仍然很生涩,因为您无法控制 WPF 的渲染线程。

这在某种程度上取决于您在图表中需要的特征数量。如果优先考虑平滑的实时显示,请不要使用 WPF。

【讨论】:

  • 如果我一直使用 WPF,它会比 MFC 更快吗?
  • 我对 MFC 没有任何经验。
【解决方案2】:

Visual Studio 2010 向 MFC 添加了类以支持从 MFC 程序使用 Direct2D 渲染。

要使用 Direct2D,首先在视图的 OnCreate 中调用 EnableD2DSupport()(从技术上讲,我想它不必在 OnCreate 中,但这是通常的位置)。然后,当 D2D 显示上下文需要更新时,您会收到 AFX_WM_DRAW2D 消息,因此您通常需要为此添加一个处理程序,并根据需要通过呈现您的内容来响应它。

要考虑的另一种可能性是使用现有控件来绘制图形。周围有很多,包括一些免费且许可相当宽松的。举个例子,CodeProject 有许多 Charting controls,其中一些使用 D2D 进行绘图,还有一些不使用。

老实说,我会有点惊讶于图表的信息更新速度足够快,以至于绘制速度通常会产生巨大的差异。在大多数典型情况下,真正的限制将是用户理解您正在绘制的内容的能力。用户根本无法观看 100 个不同的图表,每个图表都以(例如)60 Hz 的频率更新,并且很有希望从其中的大多数中获得真正的意义。在大多数情况下,真正的挑战不是更快地绘制更多数据,而是为用户提供更好的方法,让他们一次专注于他们可以关注的少数事情,并(例如)在需要时将他们的注意力吸引到重要的变化上.

【讨论】:

    猜你喜欢
    • 2011-06-05
    • 1970-01-01
    • 2011-03-10
    • 2015-11-29
    • 2012-03-24
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多