关于WPF可以做些什么来渲染UI的撕裂?
令我失望的是,我发现我正在使用的某个应用程序在某些计算机上渲染效果不佳。 UI静态图形和文本遭受严重撕裂而没有做任何动画的情况。这使得文本无法读取,当然,图形看起来很差。关于WPF可以做些什么来渲染UI的撕裂?
我注意到了不同计算机上的这个问题,但真正让我觉得这个问题是使用Radeon Mobility显卡的新东芝笔记本电脑:当笔记本电脑在电池上运行时,没有撕裂 - 但是当它插入时 - 一切都是一团糟。所以这看起来像电源线噪声问题,这显然会影响显卡 - 我猜硬件加速图形。然而,非WPF图形渲染效果很好,所以你如何告诉用户:“这不是我的应用程序,它是你的电源!”?!
你有没有碰到过这个?无论如何要修复它?
的应用程序是.NET 4.0,和笔记本电脑运行Windows 7
我碰到我的宏基笔记本电脑同样的事情。这实际上是屏幕驱动程序的驱动程序问题,供应商更新完全解决了问题。
我会建议直接联系东芝关于这个问题。将它们指向一些公开的,容易找到证明问题的WPF应用程序。
与此同时,我所知道的唯一“解决方案”是让WPF完全禁用硬件加速。 This post描述了如何强制所有WPF应用程序进行软件渲染,这应该可以纠正撕裂(以大幅降低渲染性能为代价)。
正如里德所说,这很可能是一个驱动问题。不过,我之前在一些带有最新驱动程序的卡片上看到了这一点,所以它并不总是一个可解决的问题,具体取决于您的硬件。如果这是引起特定的显卡显卡问题,你也许可以试试这个解决办法...
在注册表编辑器,您可以创建或编辑下面的DWORD值改为“1”强制软件渲染所有WPF应用程序:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics\DisableHWAcceleration
我已经在过去发现,低端机(笔记本电脑和集成显卡的机器),这往往noiceable提高WPF应用程序的性能,因为它减少之间的内存争GPU和CPU。
这些问题通常是由ATI显卡的驱动程序引起的。 NVidia卡(虽然他们有自己的问题)通常不会显示这些问题。
修复它的最简单方法是禁用硬件渲染。这可能会导致性能问题,但通常不会引起显着差异,有时甚至可以提高性能。您需要对自己的应用进行测试才能看到。从一个窗口的代码设置:
(PresentationSource.FromVisual(this) as HwndSource).CompositionTarget.RenderMode = RenderMode.SoftwareOnly;
一旦你开始使用硬件加速图形,视频驱动程序是臭名昭着的问题;这是游戏引擎开发者在获得各种硬件兼容性时遇到的主要问题。如果驱动程序更新失败,则可尝试禁用硬件加速图形:http://msdn.microsoft.com/en-us/library/aa970912.aspx#disablehardwareacceleration – 2010-10-05 15:55:21
在旁注中,我怀疑这是电源线噪声;当使用电池供电以节省电力时,系统很可能会简单地关闭硬件加速。 – 2010-10-05 15:56:50