1

我正在做很多 blitting(最近几个月写了许多 2d 游戏原型),并且我正在寻找最快的 blit 可能有比 SetDIBitsToDevice 或 StretchDIBits 更快的东西吗?据我所知,对于通常的窗口大小,这些大约是 1-5 毫秒,因此它们并不是非常快(很难或不可能写出比 200 fps 快的东西),尽管我认为这是正常的,因为 RAM 本身并不是那么快。

4

1 回答 1

3

这取决于。

大多数机器的瓶颈将是从系统内存到图形内存。

在许多情况下,SetDIBitsToDevice 和 BitBlt 之间不会有任何有效的区别,但在某些情况下,可能会有。如果您在低颜色模式下运行(例如,256),那么推送 1 字节索引比 32-bpp 像素数据更快,并将其重新映射到卡上。(是否在图形适配器或系统中处理重新映射将取决于驱动程序——我假设。)

我相信您可以做的最安全的事情是来自设备相关(兼容)位图的 BitBlt。我认为这不会比 SetDIBitsToDevice 更糟,但它通常可能是平局。

我希望(但尚未测试)任何拉伸 blit 都可能比直接 blit 稍微贵一些,除非在 GPU 上合成额外的像素。

您可能会考虑一些较新的 API,例如 Direct2D,它们旨在与硬件更紧密地合作,而不是呈现理想化的软件模型。

无论您选择哪种解决方案,我都会为机器之间的巨大性能差异做好准备。

于 2012-11-28T21:08:13.463 回答