最近在尝试重构 GDI,并开发一套自定义的图像处理函数,但在图像复制的性能上遇到了瓶颈,远不及 Windows 原生 GDI 函数的表现。
经过分析,我认为除了算法优化不足外,系统可能还利用了 GPU 加速。进一步调查后,证实了我的猜测。
GDI 渲染在 Windows 7 中的变化
在 Windows Vista 中,每个 GDI 窗口都需要一个视频内存表面和一个系统内存表面的支持。这种设计导致系统内存被大量占用。
为了改善这一状况,Windows 7 对 GDI 进行了调整。新的设计中,GDI 直接渲染到一个可由 GPU 访问的孔径内存段。这个内存段可以从存储窗口内容的视频内存表面更新。GDI 可以将结果渲染回孔径内存,再从这里发送到窗口表面。由于孔径内存段对 GPU 是可见的,因此 GPU 能够加速这些操作,例如文本渲染、BitBlts、AlphaBlend、TransparentBlt 和 StretchBlt 都能获得加速。
参考资料: