C++ - SDL:解决性能问题

C++ - SDL: Blitting performance issues

本文关键字:性能 问题 解决 SDL C++      更新时间:2023-10-16

我是C++和 SDL 的初学者,但我开发游戏已经好几年了。

我选择 SDL 是因为它的简单性,因为我想要的只是一个 2D 游戏,但我并不满意。处理表面的功能消耗了很多功率,说实话太多了。

当我第一次开始使用 SDL 时,我的帧率约为 30 FPS。然后我发现了优化表面的方法,帧率跃升至 60。此外,将像素格式从 24 位切换到 32 位将其改进为 100。

在我看来,与其他游戏开发和编程语言库相比,这种性能很弱。我一直认为这仍然是我的错,如果我正确设置了一切,我的 FPS 可能会飙升。

所以我一直在测试,发现没有代码运行(不包括我的 FPS 指标)给我带来了 400 FPS。但是,使用 SDL_FillRect() 函数清除屏幕会将其降至 100。然后,对于绘制的每个精灵,帧率变得越来越低。

真的应该这么慢吗?

首先,100 FPS 并不慢。在大多数情况下,由于显示器刷新率的原因,任何关于 60 的内容都是无关紧要的。

其次,您正在熔断什么样的表面?我记得当我制作一款大型 SDL 游戏时,我真的很惊讶地发现,我拥有的特定图像将永远用于闪光。但是稍微摆弄一下质量以消除抖动导致它几乎立即再次开始块状。我认为 SDL 在内部使用运行长度编码,因此包含运行的图像会更快地进行 bling。