winapi - 使用数组中的 RGB 数据重复填充窗口的最快方法是什么?

标签 winapi gdi rgb directdraw

我目前正在编写一个简单的游戏。我的图形代码每帧运行一次(大约每秒 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/

相关文章:

c++ - 将 list 文件移动到 dll?

c++ - 地址窗口扩展

Python win32api.mouse_event 类型错误

c++ - 设置输出引脚上忽略的媒体类型

c++ - 在按钮背景上拉伸(stretch)/收缩时位图质量下降

java - 如何将int RGB转为BYTE二维数组灰度图像

pdf - 打印机模拟器、PDF 编写器等

c++ - Windows API 选择粗体

android - 在android中将RGB转换为十六进制代码

c - 连续迭代 RGB?