在早期版本的WPF中,设置Window.AllowsTransparency或使用BitmapEffects(已弃用的效果)或TileBrush使用似乎会导致WPF切换到软件渲染模式而不是硬件渲染,从而极大地影响性能。
我找到了this这个列表,但它是从2010年的。
在框架4+中,有没有可能出现导致软件渲染发生的常见情况?假设硬件足够,纯粹与软件相关。
我找到了this这个列表,但它是从2010年的。
在框架4+中,有没有可能出现导致软件渲染发生的常见情况?假设硬件足够,纯粹与软件相关。
这份清单仍然准确。
在MSDN关于图形渲染层次的页面中有介绍。第二个标签为“以下功能和能力不支持硬件加速: ” 列出了可能会导致WPF无法加速渲染的具体标准。
其中包括:
TileBrush
RenderTargetBitmap
渲染的内容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。在良好的视频驱动程序上,生成的副本将完全保留在视频卡上,从而实现出色的性能。但是,一些视频驱动程序可能会选择通过系统内存执行此复制。在这样的系统上,性能不会像视频卡那样好,但对于许多情况仍然是合理的。