使用SwapBuffers()与多个OpenGL画布和垂直同步?

时间:2013-09-11 17:44:55

标签: python opengl wxpython pyopengl vsync

我有一个使用wxPython编写的GUI,它包含两个GLCanvas es,一个'display'画布和一个'preview'画布,我正在使用PyOpenGL绘制一些非常简单的几何图形。 'preview'和'display'画布显示同一帧缓冲区的内容:

enter image description here

我需要以一致的帧速率同步更新这两个画布而不会撕裂。

到目前为止,我刚刚打电话

self.SetCurrent()
# draw stuff...
self.SwapBuffers()

用于渲染循环中的预览和显示画布。如果我在驱动程序设置中禁用vsync,这种方法效果相当不错。

但是,如果启用vsync,我的帧速率会下降到~30Hz,这是我显示器垂直刷新率的一半。可能这是因为渲染循环的执行在每个SwapBuffers()调用等待下一次垂直刷新时停止 - 如果我注释掉两个SwapBuffers()调用中的一个,我的帧速率会回升到60Hz,但是当然,只有我的一幅画布得到更新。

我真正喜欢的是我的两个画布同步更新,每个vsync间隔一次。有什么方法可以使用wx.glcanvas.GLCanvas类来实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

Andon在他的评论中暗示的是,您使用{wgl | glX} SwapInterval为第一个设置交换间隔,将SwapBuffers同步为1,然后在同步SwapBuffers返回后立即将交换间隔设置为0并执行另一个SwapBuffers。