【问题标题】:What can one do about WPF render tearing of the UI?对于 WPF 渲染 UI 的撕裂可以做些什么?
【发布时间】:2011-04-21 09:20:32
【问题描述】:

令我失望的是,我发现我正在开发的应用程序之一在某些计算机上的渲染效果相当差。 UI 静态图形和文本在不做任何动画的情况下遭受严重的撕裂。这使得文本不可读,当然,图形看起来很差。

我在不同的计算机上都注意到了这个问题,但真正让我想到的是一台带有 Radeon Mobility 视频卡的新型东芝笔记本电脑:当这台笔记本电脑使用电池运行时,没有撕裂 - 但当它插上电源运行时 -一切都是一团糟。所以这看起来像是电源线噪声的问题,显然会影响显卡——我猜是硬件加速图形。但是,非 WPF 图形渲染良好,那么您如何告诉用户:“这不是我的应用程序,它是你的电源!”?!

你遇到过这种情况吗?有没有办法修复它?

应用程序是 .NET 4.0,笔记本电脑运行的是 Windows 7。

【问题讨论】:

  • 一旦您开始使用硬件加速图形,视频驱动程序就会出现问题。这是游戏引擎开发人员在获得各种硬件的兼容性时面临的一个主要问题。驱动更新失败,您可以尝试禁用硬件加速图形:msdn.microsoft.com/en-us/library/…
  • 附带说明,我怀疑这是电源线噪音;很可能系统在使用电池运行时只是关闭硬件加速以节省电量。

标签: wpf rendering tearing


【解决方案1】:

我在 Acer 笔记本电脑上也遇到过同样的问题。其实是屏幕驱动的驱动问题,厂商更新彻底解决了问题。

我建议就这个问题直接联系东芝。将他们指向一些公开的、易于查找的 WPF 应用程序来演示该问题。

与此同时,我所知道的唯一“解决方案”是让 WPF 完全禁用硬件加速。 This post 描述了如何强制所有 WPF 应用程序进行软件渲染,这应该可以纠正撕裂(以显着降低渲染性能为代价)。

【讨论】:

    【解决方案2】:

    正如 Reed 所说,这很可能是驱动程序问题。但是,我以前在一些具有最新驱动程序的卡上看到过这种情况,因此这并不总是可以解决的问题,具体取决于您的硬件。如果这是由特定显卡引起的图形问题,您也许可以尝试这种解决方法...

    在 regedit 中,您可以创建或将以下 DWORD 值编辑为“1”以强制所有 WPF 应用程序的软件呈现:

    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics\DisableHWAcceleration
    

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

    【讨论】:

      【解决方案3】:

      这些问题通常是由 ATI 显卡的驱动程序引起的。 NVidia 卡(虽然它们有自己的问题)通常不会显示这些问题。

      修复它的最简单方法是禁用硬件渲染。这可能会导致性能问题,但通常不会产生明显的差异,有时甚至可以提高性能。您需要对其进行测试以供您自己的应用程序查看。从 Window 的代码中设置:

      (PresentationSource.FromVisual(this) as HwndSource).CompositionTarget.RenderMode = RenderMode.SoftwareOnly;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-09
        • 1970-01-01
        • 2018-07-29
        • 2011-08-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多