2

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

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

我需要做一些额外的事情来告诉 OpenGL 它正在全屏运行还是这是 OpenGL 的限制?

(我在 Windows XP 中运行)

4

3 回答 3

8

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

老实说,我看不出有什么好的理由(除了基准测试)来尝试实现比屏幕刷新率更快的帧速率。您(和玩游戏的人)将无法注意到速度或性能方面的任何差异,因为显示器无论如何只能绘制 60 fps。另外,如果您不与垂直回扫同步,则很有可能会出现屏幕撕裂

于 2009-08-02T03:46:05.113 回答
1

这是垂直同步问题吗?有关配置或您的环境的某些内容可能会将最大帧速率限制为显示器的刷新率。

于 2009-08-02T01:28:41.113 回答
0

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

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

于 2009-08-02T02:18:11.927 回答