硬件加速在WPF中是如何工作的?

13

网络上有很多文章,但仍然不清楚,因此我需要一个清晰的解释:硬件加速如何与WPF一起工作?

1个回答

46

您的问题没有具体说明您在阅读互联网文章时困惑的内容,或者关于WPF中硬件加速的确切问题。因此,我将尝试为您提供一个一般但简化的工作原理概述。

为了获得GPU加速渲染,Windows Presentation Foundation(WPF)通过DirectX管线呈现和显示图形。 GPU或图形处理器是驱动视频卡的芯片。基本上,硬件加速可以将渲染WPF应用程序中的图形工作从计算机的主处理器(CPU)转移到视频卡的处理器(GPU)。通过使用专门设计用于渲染图形的视频卡硬件,而不是由CPU运行的软件函数,增加了应用程序图形和用户界面的性能或加速度。最终目标是使复杂的图形例程成为“渲染限制”(即受GPU功能限制),而不是“处理器限制”(即受计算机CPU能力和速度限制)。这释放了CPU执行其他工作,充分利用了您的视频卡独特的图形能力,并且每次用户升级到更新、更快、更高级的视频卡(随着其可用性而变化)时,加速应用程序的性能。

当然,这假定您的视频卡支持硬件加速。实际上,并非所有视频卡都支持,WPF通过三层方法进行适应:

  1. 如果您的视频卡不提供任何级别的硬件加速,例如,如果您运行的DirectX版本小于7.0,则WPF将退回到第0层渲染模式或软件加速。

  2. 如果您的视频卡支持部分硬件加速,例如,如果您运行的DirectX版本介于7.0和9.0之间,则WPF使用第1层渲染模式。

  3. 如果您的视频卡支持所有图形输出的完全硬件加速,对应于等于或大于9.0的DirectX版本,则WPF使用第2层渲染模式。

这个MSDN页面提供了有关这些图形渲染层及其支持硬件加速的功能和能力的更多信息。

我不知道你是否已经看过这篇博客文章,但如果你对我刚才解释的内容有更好的理解,现在再读一遍可能会更有意义。

然而,请记住,WPF的部分优势在于您不必担心此过程的细节和特殊性。 技术聪明到足以在可能的情况下使用硬件优化,而在必要时回退到基于软件的渲染。即使在具有传统视频卡的旧计算机上,您的WPF应用程序也可以运行,只是比在新客户端上慢。因此,这可能只是您在休闲娱乐之外无需担心的问题。


1
我有一个WPF项目,在其中需要使用StreamGeometryContext和PolyLineTo函数在用户控件的OnRender上渲染200,000个多边形。当我这样做时,整个窗口变得非常缓慢,甚至只是拖动窗口也很困难。所有的多边形对象和笔都被冻结了。我不认为硬件加速正在被利用。有什么建议吗?我的系统是Windows 7 + Visual Studio 13。 - Wayne Lo
我已经更新了MSDN链接,指向.NET 4.0版本,因为当前版本(无版本号)的链接已经失效 - 微软似乎已经删除了.NET 4.5+的文章。 - Bob
1
@WayneLo 我知道这是老旧的东西,而且我对WPF不是很了解,但我看过一些代码,它们非常糟糕。我真的不知道 PolyLineTo 函数,但听起来它构造了一条线来渲染它。这将完全在CPU上完成。大多数WPF的“它是硬件加速”的卖点都是毫无意义的,因为大多数变换都必须在CPU上完成。 - Tara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接