在 WPF 的早期版本中,设置 Window.AllowsTransparency 或使用 BitmapEffects(不推荐使用的)或 TileBrush 使用,显然可能导致 WPF 切换到软件渲染模式而不是硬件渲染,从而显着影响性能。
我找到了这个列表,但它是从 2010 年开始的。
是否有任何可能导致软件渲染出现在框架 4+ 中的常见情况?假设硬件足够,纯软件相关。
这个列表仍然是准确的。
这在 MSDN 的有关图形渲染层的页面上有所介绍。第二个标记为“以下特性和功能不是硬件加速的:”列出了可能导致 WPF 中非加速渲染的特定标准。
这包括:
TileBrush
RenderTargetBitmap
Dwayne Need 的以下博客文章似乎表明Windows XP 上的分层窗口现在是硬件加速的。
http://blogs.msdn.com/b/dwayneneed/archive/2008/09/08/transparent-windows-in-wpf.aspx
DirectX 确实提供了 IDirect3DSurface9::GetDC 方法,该方法可以返回引用 DirectX 表面的 DC。不幸的是,如果在包含 alpha 通道的表面上调用此方法,则 DX9c 中有一个限制,该方法将失败。当然,我们分层窗口 API 的全部意义在于启用每像素透明度。Vista 取消了此限制,但我们的初始版本强制 WPF 使用其软件渲染回退并渲染到 XP 上的分层窗口。我们也能够解除 XP 的这一限制,我们将其作为热修复 (KB 937106) 发布。这个热修复也包含在 XP SP3 中,所以去吧!现在,在 XP 上,我们可以通过 DirectX 进行渲染,并将 IDirect3DSurface9::GetDC 的结果直接传递给 UpdateLayeredWindow。在良好的视频驱动程序上,生成的副本将完全保留在视频卡上,从而获得出色的性能。但是,某些视频驱动程序可能会选择通过系统内存执行此复制。此类系统上的性能不会那么好,但对于许多场景来说仍然应该是合理的。
我通过在分层窗口应用程序上运行 WPF Performance Suite 的 Perforator 工具(并选中标题为“用紫色色调绘制软件渲染”的复选框)对此进行了测试……一切似乎都是硬件加速的(没有紫色)。
最近关于图形渲染层的 MSDN 文档仍然说(正如 Reed Copsey 指出的那样)它应该是软件渲染的,但这不是我所经历的。