【问题标题】:PyOpenGL + Pygame capped to 60 FPS in FullscreenPyOpenGL + Pygame 在全屏模式下限制为 60 FPS
【发布时间】:2010-11-16 02:51:37
【问题描述】:

我目前正在开发一个用 pygame 编写的游戏引擎,我想添加 OpenGL 支持。

我写了一个测试,看看如何让 pygame 和 OpenGL 一起工作,当它在窗口模式下运行时,它的运行速度在 150 到 200 fps 之间。当我全屏运行它时(我所做的只是在设置窗口时添加 FULLSCREEN 标志),它下降到 60 fps。我添加了更多绘图功能,看看它是否只是性能大幅下降,但它始终以 60 fps 运行。

我需要做些什么来告诉 OpenGL 它正在全屏运行还是这是 OpenGL 的限制?

(我在 Windows XP 中运行)

【问题讨论】:

  • 您在什么系统上运行(windows、linux/X11 等)?

标签: python fullscreen pygame pyopengl


【解决方案1】:

正如 frou 所指出的,这将是由于 Pygame 在您通过调用 display.flip() 更新屏幕时等待垂直回溯。正如Pygame display documentation 所述,如果您使用HWSURFACEDOUBLEBUF 标志设置显示模式,display.flip() 将在交换缓冲区之前等待垂直回扫。

说实话,我认为(除了基准测试之外)没有任何充分的理由来尝试实现比屏幕刷新率更快的帧速率。您(和玩游戏的人)将无法注意到速度或性能的任何差异,因为显示器无论如何只能绘制 60 fps。另外,如果你不与垂直回溯同步,你很有可能会得到screen tearing

【讨论】:

    【解决方案2】:

    这是V-Sync 的问题吗?配置或您的环境可能会限制显示器刷新率的最大帧速率。

    【讨论】:

      【解决方案3】:

      如果您在全屏和窗口模式之间切换时没有更改clock.tick(),这几乎肯定是一个垂直同步问题。如果您在 LCD 上,那么这是 100% 确定的。

      不幸的是,许多地方都可以处理垂直同步,包括 SDL、Pyopengl、显示服务器和视频驱动程序。如果您使用的是 Windows,您可以调整 nvidia 控制面板中的 vsync 切换来进行测试,并且很可能在 nvidia-settings for linux 中也有一些东西。我猜其他制造商的驱动程序有类似的设置,但这是一个猜测。

      【讨论】:

      • “changein clock.tickf()”是什么意思?我也在使用计算机附带的显卡,所以我认为我无法访问 vsync 设置。有没有办法用 OpenGL 做到这一点?
      • clock.tick() 是 pygames 控制屏幕重绘频率的机制。 pygame.org/docs/ref/time.html 是文档,这里是使用它的示例pygame.org/docs/tut/chimp/ChimpLineByLine.html
      • @htw 如果这是一个 pygame 实现问题,那么无论全屏状态如何,结果都不是统一的吗?
      • 我正在调用clock.tick(),但我对“更改”clock.tick() 感到困惑。我想我永远不会让引擎以高于屏幕刷新率的 fps 运行。由于这因系统而异,有什么方法可以用 python 找出刷新率?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      相关资源
      最近更新 更多