最快的blit(在winapi下)

最快的blit(在winapi下),winapi,optimization,2d,blit,Winapi,Optimization,2d,Blit,我正在做很多的布景(写很多2d游戏原型) 最近几个月),我正在寻找最快的blit 可能有比SetDIBitsToDevice更快的吗 还是担架?据我记忆,大约是1-5毫秒 适用于通常的窗户尺寸,因此不会太快(硬或硬) 但不可能写出速度超过200 fps的东西 我认为这是正常的,因为RAM本身并没有这么快。这要看情况而定 大多数机器的瓶颈将是从系统内存转移到图形内存 在许多情况下,SetDibitToDevice和BitBlt之间不会有任何有效的区别,但在某些情况下,可能会有。如果您在低颜色模式(

我正在做很多的布景(写很多2d游戏原型) 最近几个月),我正在寻找最快的blit 可能有比SetDIBitsToDevice更快的吗 还是担架?据我记忆,大约是1-5毫秒 适用于通常的窗户尺寸,因此不会太快(硬或硬) 但不可能写出速度超过200 fps的东西 我认为这是正常的,因为RAM本身并没有这么快。

这要看情况而定

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

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

我相信你能做的最安全的事情是从依赖于设备(兼容)的位图中进行BitBlt。我不认为这会比SetDibittoDevice更糟糕,但它可能经常是平局

我预计(但尚未测试)任何拉伸光点可能比直光点稍微贵一些,除非额外的像素在GPU上合成

你可能会考虑一些新的API,比如DoCT2D,它被设计成与硬件更紧密地工作,而不是提出一个理想化的软件模型。


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

通常情况下,人们不会太担心将位图渲染到屏幕上所需的时间,而是更愿意在后台缓冲区中合成内容,然后将整个内容blit。在任何情况下,您的限制可能是视频硬件,而不是用于执行blit的特定功能。您可能会考虑使用DirectX,它可能比Windows API更优化。好的,但是如果您可以添加更多内容,我也很想听到(我对winapi下的blitting非常感兴趣)