2012-11-28 42 views
0

我做了很多塊傳輸(寫在最近幾個月許多2D遊戲原型 ),我正在尋找最快的blit 可能有可能什麼比的SetDIBitsToDevice 或更快的StretchDIBits?這些大約是1-5毫秒,據我記得一般窗口大小 ,所以他們不是非常快(硬或 不可能寫速度超過200幀/秒),雖然 這是正常的,我認爲,導致RAM本身不是很快。最快的blit(下WINAPI)

+1

通常,人們不必太擔心將位圖渲染到屏幕需要多長時間,而寧願在後臺緩衝區中組合東西,然後將整個事件覆蓋。無論如何,你的限制很可能是視頻硬件,而不是你用來完成blit的特定功能。您可能會考慮使用DirectX,它可能比Windows API更高度優化。 –

回答

1

這取決於。

大多數機器的瓶頸將從系統內存推向圖形內存。

在許多情況下,SetDIBitsToDevice和BitBlt之間不會有任何有效的區別,但在某些情況下,可能會有。如果您在低色彩模式下運行(例如,256),那麼推送1字節索引比32-bpp像素數據更快,並將其重新映射到卡上。 (無論重新映射是在圖形適配器還是系統中處理,都取決於驅動程序 - 我認爲)。

我相信您可以做的最安全的事情是從設備相關(兼容)位圖獲取BitBlt。我不認爲這會比SetDIBitsToDevice更糟糕,但它可能通常是一條平行線。

我期望(但沒有測試過)任何拉伸blit可能會比直接blit稍貴,除非額外的像素在GPU上合成。

您可能會考慮一些較新的API,如Direct2D,它們旨在與硬件更緊密地協作,而不是呈現理想化的軟件模型。

無論您選擇哪種解決方案,我都會爲機器之間的巨大性能差異做好準備。

+0

好的,但如果可以添加更多的東西,我也想聽聽(我對winapi下的blitting非常感興趣) –