我目前正在研究用pygame编写的游戏引擎,我想添加OpenGL支持。

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

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

(我在Windows XP中运行)

有帮助吗?

解决方案

正如frou指出的那样,这可能是由于Pygame在你通过调用display.flip()更新屏幕时等待垂直回扫。正如 Pygame display文档说明,如果你使用HWSURFACEDOUBLEBUF标志设置显示模式,<=>将在交换缓冲区之前等待垂直回扫。

说实话,我没有看到任何好的理由(除了基准测试)以尝试实现比屏幕刷新率更快的帧速率。你(以及玩游戏的人)将无法注意到速度或性能的任何差异,因为显示器无论如何也只能画60 fps。另外,如果你没有与垂直回扫同步,你很可能会得到屏幕撕裂

其他提示

这是 V-Sync 问题吗?有关配置或环境的一些信息可能会将最大帧速率限制为显示器的刷新率。

如果在全屏和窗口模式之间切换时没有更改clock.tick(),这几乎肯定是vsync问题。如果你在液晶显示器上,则100%确定。

不幸的是,v-sync可以在许多地方处理,包括SDL,Pyopengl,显示服务器和视频驱动程序。如果您正在使用Windows,您可以调整nvidia控制面板中的vsync切换进行测试,并且在Linux的nvidia-settings中也可能存在更多内容。我猜其他制造商的驱动程序有类似的设置,但这是一个猜测。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top