在Win32中,GDI函数BitBlt和StretchBlt是否具有硬件加速的功能?

8

在搜索中,似乎无法得到明确的答案。Win32位块传输操作(GDI而非GDI+)是否通过硬件加速?我不知道这些函数如何与图形驱动程序接口。是否有任何函数调用可以验证此功能,例如使用GetCaps查询特定图形设备(Win32图形设备)以查看这些函数是否正在接受硬件加速?

2个回答

5
根据这个,只有在Windows 7及以上版本上,GDI才能进行硬件加速。 这个列出了如何指定哪些操作要进行硬件加速。列表中包括BitBltStretchBlt,所以它们是可以进行硬件加速的,但您需要有支持它的系统,并且需要启用它。

3
大部分正确。GDI 已经有很长时间的硬件加速了。Windows Vista 只是对于 GDI 来说是一个黑暗的时期;它失去了硬件加速,用户不断抱怨。因此(或许这一直是计划),Windows 7 重新给 GDI 加回了硬件加速,宇宙又恢复和谐了。 - Cody Gray

3

GDI操作是否进行硬件加速取决于驱动程序,Windows的所有版本(除了Vista*)都支持它。

  • Vista增加了一个名为Windows显示驱动程序模型(WDDM)的新驱动程序模型。
  • Windows 7增加了WDDM v1.1,其中包括GDI硬件加速的返回

*:在Vista上使用XP驱动程序是可能的,但我不知道在这种设置中GDI会发生什么情况。(也许可以通过检查D3DCAPS2_CANSHARERESOURCE来检测?)编辑:根据这篇文章,它与XPDM兼容。

在Win7上,您可以检查一些内核cap,但我不知道在用户模式下是否可以检查。


注意:根据我的测试,似乎有一件事情会阻止Win7上的加速,那就是在Stretch期间使用SetStretchBltMode(dc,HALFTONE)启用线性过滤(我不确定XP上是否加速)。 - Suma
@Suma 是的,我也想知道为什么硬件可以做得很好。事实上,这正是能够获得显著收益的地方。 - Mike Versteeg

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