PyOpenGL + Pygame 全屏锁定在 60 FPS

2 投票
3 回答
4222 浏览
提问于 2025-04-15 13:19

我现在正在用pygame开发一个游戏引擎,想要加上OpenGL的支持。

我写了一个测试,看看pygame和OpenGL怎么一起工作。在窗口模式下运行时,帧率在150到200之间。但是当我切换到全屏模式(我只是加了一个FULLSCREEN的标志来设置窗口)时,帧率降到了60。我还添加了很多绘图功能,想看看是不是性能大幅下降,但无论怎么做,帧率始终保持在60。

我需要做些什么额外的设置来告诉OpenGL它正在全屏运行,还是说这是OpenGL的一个限制呢?

(我是在Windows XP上运行的)

3 个回答

0

如果你在切换全屏和窗口模式时没有调整你的 clock.tick(),那么这很可能是一个垂直同步(vsync)的问题。如果你使用的是液晶显示器,那就几乎可以肯定了。

不幸的是,垂直同步可以在很多地方进行设置,包括 SDL、Pyopengl、你的显示服务器和视频驱动程序。如果你使用的是 Windows 系统,可以在 NVIDIA 控制面板中调整 vsync 的开关来进行测试,Linux 系统的 NVIDIA 设置中也很可能有类似的选项。我猜其他品牌的驱动程序也有类似的设置,但这只是我的猜测。

1

这是一个垂直同步(V-Sync)的问题吗?可能是你的设置或环境有什么限制,把最高的帧率限制到了你显示器的刷新率。

8

正如frou提到的,这个问题是因为Pygame在你调用display.flip()更新屏幕时,会等待垂直回扫。根据Pygame的display文档,如果你在设置显示模式时使用了HWSURFACEDOUBLEBUF标志,display.flip()会在交换缓冲区之前等待垂直回扫。

老实说,我觉得没有什么好的理由(除了做性能测试)去追求比屏幕刷新率更快的帧率。你(还有玩你游戏的人)根本不会感觉到速度或性能有什么不同,因为显示器最多只能显示60帧每秒。而且,如果你不和垂直回扫同步,很可能会出现画面撕裂的问题。

撰写回答