如何解决WPF UI的渲染撕裂问题?

3
很遗憾,我发现我正在开发的一个应用程序在某些电脑上呈现效果非常差。即使没有进行任何动画,UI静态图形和文字也会出现严重的撕裂现象。这使得文本无法阅读,当然,图形看起来也很差。
我注意到在不同的电脑上都有这个问题,但真正让我思考的是一台新的东芝笔记本电脑,带有Radeon Mobility视频卡:当这台笔记本电脑使用电池时,没有撕裂现象 - 但当它插上电源时,一切都乱了。因此,这似乎是一个电源线噪声的问题,显然影响了视频卡 - 我猜测是硬件加速的图形。然而,非WPF图形呈现良好,那么如何告诉用户:“这不是我的应用程序,是你的电源供应!”?
您是否遇到过这种情况?有没有办法解决?
该应用程序是.NET 4.0版本,笔记本电脑运行Windows 7操作系统。

视频驱动程序在开始使用硬件加速图形后往往会出现问题;这是游戏引擎开发人员在实现广泛硬件兼容性时面临的主要问题。如果驱动程序更新失败,您可以尝试禁用硬件加速图形:http://msdn.microsoft.com/en-us/library/aa970912.aspx#disablehardwareacceleration - Dan Bryant
1
顺便说一句,我怀疑这不是电力线噪声;最有可能的是系统在电池供电时关闭硬件加速以节省电源。 - Dan Bryant
3个回答

2
问题通常是由于ATI显卡驱动程序引起的。而NVidia显卡(虽然它们也有自己的问题)通常不会显示这些问题。
最简单的解决方法是禁用硬件渲染。这可能会导致性能问题,但通常不会有明显的差异,有时甚至可以提高性能。你需要测试一下你自己的应用程序来确定是否有效。要从Window的代码中设置:
(PresentationSource.FromVisual(this) as HwndSource).CompositionTarget.RenderMode = RenderMode.SoftwareOnly;

2

我在我的Acer笔记本电脑上遇到了同样的问题。实际上这是屏幕驱动程序的问题,而供应商的更新完全解决了这个问题。

我建议直接联系Toshiba解决这个问题。指向一些公共、易于查找的WPF应用程序,以演示这个问题。

同时,我所知道的唯一的“解决方案”是让WPF完全禁用硬件加速。 这篇文章描述了如何强制所有WPF应用程序使用软件渲染,这应该可以纠正撕裂(但代价是极大地降低了渲染性能)。


1

正如Reed所说,这很可能是驱动程序问题。然而,我曾经在一些已更新驱动程序的卡上看到过这种情况,因此根据您的硬件配置,它并不总是可以解决的问题。如果这是由特定图形卡引起的图形问题,您可以尝试以下解决方法...

在注册表编辑器中,您可以创建或编辑以下DWORD值为“1”,以强制所有WPF应用程序进行软件渲染:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics\DisableHWAcceleration

我发现在低端机器上(netbooks和集成显卡机器)这通常可以明显提高WPF应用程序的性能,因为它减少了GPU和CPU之间的内存争用。


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