【问题标题】:C++ - SDL: Blitting performance issuesC++ - SDL:Blitting 性能问题
【发布时间】:2012-07-01 21:58:23
【问题描述】:

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

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

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

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

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

真的应该这么慢吗?

【问题讨论】:

  • 您在视频的format 中使用 blitting 的表面是否相同?

标签: c++ performance sdl surface frame-rate


【解决方案1】:

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

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

【讨论】:

  • 我使用的精灵都是从位图文件中加载的。每个尺寸大约为 100 x 100。
  • 屏幕上显示的主表面具有 HWSURFACE 和 DOUBLEBUF 标志。将 HWSURFACE 更改为 SWSURFACE 并删除 DOUBLEBUF 对帧率没有影响。
猜你喜欢
  • 2010-12-04
  • 2011-04-16
  • 1970-01-01
  • 2012-06-05
  • 2014-09-14
  • 2011-06-30
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多