在早期版本的WPF中设置Window.AllowsTransparency或使用BitmapEffects(不推荐使用的)或TileBrush用法,显然可能导致WPF切换到软件渲染模式而不是硬件渲染,从而显着影响性能。
我找到了this列表,但是从2010年开始。
是否有任何可能导致软件渲染发生在框架4+中的常见情况?假设硬件足够,纯粹与软件有关。
答案 0 :(得分:4)
此列表仍然准确。
这在MSDN的有关图形渲染层的页面上有介绍。第二个标记为“以下特性和功能不是硬件加速:”列出了可能导致WPF中非加速渲染的特定标准。
这包括:
TileBrush
RenderTargetBitmap
答案 1 :(得分: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 Performance Suite的Perforator工具(并在分层窗口应用程序上选中标题为'使用紫色色调绘制软件渲染')的复选框来测试它...一切似乎都是硬件加速(没有紫色着色)。
最近关于Graphics Rendering Tiers的MSDN文档仍然说(正如Reed Copsey指出的那样)它应该是软件渲染的,但这不是我所经历的。