我目前正在编写一个简单的游戏。我的图形代码每帧运行一次(大约每秒 30 次),并将 RGB 数据写入具有 640 * 480 = 307200 个条目的数组。
我创建了一个 Win32 窗口,其客户区大小正好为 640 x 480 像素。在空窗口中显示 RGB 数据的最快方法是什么?
窗口需要每一帧更新,所以我需要避免闪烁。我应该为此使用 GDI 吗?或者是否有使用不同库(例如 DirectDraw)的更快方法?
编辑:
谢谢大家的回复。首先,让我排除 Direct2D 作为一个选项 - 我需要支持 Windows XP。其次,我有 3D 背景,因此 Yann Ramin 和 Ben Voigtto 建议的方法 - 使用 Direct3D/OpenGL 和单个纹理四边形 - 是我过去一直这样做的方法。
但是,我有兴趣了解 2D API 是否是更好的解决方案。由于没有明确的答案,我整理了一个测试程序。该代码只是尽可能快地在屏幕上重复显示帧缓冲区。
我已将我的结果发布为 this follow-up question 的一部分.
最佳答案
使用 GDI 最好的办法就是使用 SetDIBitsToDevice
直接将 RGB 数据从数组复制到窗口。当然,如果您需要完全消除闪烁,DirectX 是不错的选择。
关于winapi - 使用数组中的 RGB 数据重复填充窗口的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4120542/