DirectDraw HAL 的探讨


最近忙于风魂plus 的制作. 应很多朋友的强烈要求, 加入了 DirectDraw HAL 的支持. 关于显卡的 2D 加速. 目前主要是在于多余显存的使用. 显卡可以利用局部总线, 不经过 CPU 而直接将显存数据复制到显存. 这降低了 CPU 的负荷.

现在大多数显卡支持这种特性, 但真正效率如何? 我一直没有做测试. 据说是显存到显存的 blit 操作是可以忽略时间的. 可是我实际测试却大失所望 ;-( 不过公正的说, 我用的显卡: S3/375 4M 已经比较老的, 新的显卡的 2D 性能将大大超过它. 这里仅就这过时的显卡做一个探讨.

为了使用显卡硬件, 必须把 backbuffer 建立在显存中. 风魂 plus 为了和其软件模式统一, 没有使用 flip 的方式, 而使用了稍微慢一点的 创建 off-screen 位图, 然后 blt 到主surface 的方式. 经过测试. 从 off-screen surface bltfast 到 主屏幕, 速度比我原来的内存 buffer 到主屏幕的速度快了大约 50%, 的确值得祝贺 :-) 但并不是某些新显卡上可以得到的近似为 0 的时间.

对于精灵的显示, 风魂plus 使用了用户自己上载到显存的方法, 使用硬件加速. 可惜在我的破显卡上 稍微让人失望. 如果加入了 keycolor 的检查, 显存到显存消耗的时间大致和纯软件的 MMX 优化后的 内存到内存的 blit 速度相当. 如果精灵的图片尚未上载到显存, 就很可怕了. 由于显存读速度巨慢, 检查透明色的 blit 操作慢的吓人. 当然, backbuffer 放在显卡上后, 更复杂的 alpha 混合操作的 快速处理都别想了.

当然这些都是在已经被淘汰的显卡 S3/375 上测试的. 鉴于可以预见到的显卡技术的发展, 风魂 plus 为其留出的硬件加速模块还将很有作为. 谨慎灵活用之.