我想通过为 VESA 视频内存实现更好的双缓冲来提高我的图形代码的性能。
背景:
我在x86_64 nasm中编写了一个简单的生命游戏实现。它在 QEMU 中启动,切换到 64 位并从一些伪随机初始状态运行游戏。
我正在使用内存缓冲区来存储“下一个”状态,并且在每个刻度结束时,我将整个缓冲区复制到视频内存位置,然后将其归零。在我目前的情况下,每次滴答都有几乎 2MiB 的数据交换/更改,这可能是不必要的。这种方法在 320x200x8bpp 中运行良好,但现在在 VESA 640x480x24bpp 中它太慢了。
我确信有更好的方法可以做到这一点,我的第一个想法是简单地交换缓冲区的内存地址。我寻找了一种方法来做到这一点,但在编程参数方面找不到任何东西。我可以获得 VESA 模式信息等,但是有没有办法设置一些值?
或者也许我做错了,有更好/其他的方法吗?
一些注意事项:
- 64 位长模式,没有可用的 BIOS 中断
- 我正在写入映射到 RAM 位置@VBEModeInfo.VidMemBasePtr 的连续视频内存