最快的blit(在winapi下)

时间:2012-11-28 17:27:54

标签: winapi optimization 2d blit

我正在做很多blitting(编写许多2D游戏原型 在最近几个月),我正在寻找最快的blit 可能是否有比SetDIBitsToDevice更快的东西 还是StretchDIBits?据我记得,这些约为1-5毫秒 对于通常的窗口大小,所以他们不是非常快(硬或 但是不可能写出比200 fps更快的东西 我认为这是正常的,因为RAM本身并不是那么快。

1 个答案:

答案 0 :(得分:1)

取决于。

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

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

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

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

您可能会考虑使用一些较新的API,例如Direct2D,这些API旨在与硬件更紧密地协作,而不是提供理想的软件模型。

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