C++-SDL : Blitting performance issues

标签 c++ performance sdl surface frame-rate

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

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

当我第一次开始使用 SDL 时,我得到了大约 30 FPS。然后我发现有关优化表面的信息,帧率跃升至 60。还将像素格式从 24 位切换到 32 位将其提高到 100。

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

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

真的应该这么慢吗?

最佳答案

首先,100 FPS 并不慢。在大多数情况下,60 左右的任何值都是无关紧要的,因为无论如何都要考虑显示器的刷新率。

其次,您要对哪些表面进行 blit 处理?我记得当我制作一个大型 SDL 游戏时,我真的很惊讶地发现我拥有的特定图像会永远被 blit。但是稍微调整质量以消除抖动导致它几乎立即再次开始闪烁。我认为 SDL 在内部使用运行长度编码,因此包含运行的图像会更快地 blit。

关于C++-SDL : Blitting performance issues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11277548/

相关文章:

c# - 哪个更快?++、+= 或 x + 1?

C++ 多个大文件在一个二进制文件中

c++ - 使用 LoadLibraryA 加载 dll 时出错

c++ - 在 C++ 中使用模板时如何使用 void 参数

c++ - 使用在线匿名结构进行组织

带有原型(prototype)的 Javascript 函数继承

android - Android 中共享首选项的最佳替代方案是什么?

eclipse - 安装 pySDL2 后 SDL2 的运行时错误

c++ - 有进度的快速文件复制

c++ - 为什么此代码会导致访问冲突?