WPF 4+软件渲染仍然存在问题吗?

4
在早期版本的WPF中,设置Window.AllowsTransparency或使用BitmapEffects(已弃用的效果)或TileBrush使用似乎会导致WPF切换到软件渲染模式而不是硬件渲染,从而极大地影响性能。
我找到了this这个列表,但它是从2010年的。
在框架4+中,有没有可能出现导致软件渲染发生的常见情况?假设硬件足够,纯粹与软件相关。
2个回答

4

这份清单仍然准确。

在MSDN关于图形渲染层次的页面中有介绍。第二个标签为“以下功能和能力不支持硬件加速: ” 列出了可能会导致WPF无法加速渲染的具体标准。

其中包括:

  • TileBrush
  • 通过RenderTargetBitmap 渲染的内容
  • 任何打印输出
  • 超出图形硬件最大纹理尺寸的表面
  • 在Windows XP上的分层窗口。

0
以下博客文章由Dwayne Need撰写,似乎表明在Windows XP上分层窗口现在已经硬件加速

http://blogs.msdn.com/b/dwayneneed/archive/2008/09/08/transparent-windows-in-wpf.aspx

DirectX提供了IDirect3DSurface9 :: GetDC方法,可以返回引用DirectX表面的DC。不幸的是,在DX9c中有一个限制,如果在包含Alpha通道的表面上调用此方法,则会失败。当然,我们分层窗口API的整个重点是实现逐像素透明度。这个限制在Vista中被解除了,但我们的初始版本强制WPF在XP上使用其软件渲染回退来渲染分层窗口。我们也能够解除XP的这个限制,并发布了热修复程序(KB 937106)。这个热修复程序也包含在XP SP3中,所以去获取它吧!现在,在XP上,我们可以通过DirectX进行渲染,并直接将IDirect3DSurface9 :: GetDC的结果传递给UpdateLayeredWindow。在良好的视频驱动程序上,生成的副本将完全保留在视频卡上,从而实现出色的性能。但是,一些视频驱动程序可能会选择通过系统内存执行此复制。在这样的系统上,性能不会像视频卡那样好,但对于许多情况仍然是合理的。
我通过运行 WPF 性能套件的 Perforator 工具(并勾选标题为“使用紫色色调绘制软件渲染”复选框)来测试了这一点……在一个分层窗口应用程序上……一切似乎都是硬件加速的(没有紫色着色)。
最近 MSDN 文档中关于图形渲染层级的说明仍然说应该使用软件渲染,但这不是我的经验。

哈!我刚刚发现了这个StackOverflow 帖子 ... 这证实了我所看到的。 - cplotts

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