Qt 4中的OpenGL更新速率

Dav*_*ave 2 opengl qt qt4

我正在开发一个使用OpenGL的Qt 4.7中的应用程序.我知道必须调用updateGL()才能刷新视图,从后备缓冲区进行交换但是,应该多久进行一次?
它应该尽可能频繁地完成,因为我正在显示动画(即没有静态图像).
我知道最大速率(fps)将是监视器刷新的倍数.让我们假设监视器垂直刷新,如果50hz.updateGL()最多应每20 ms调用一次.
如果updateGL()的完成时间超过20毫秒,会发生什么?
如果我每次调用updateGL(),比如1毫秒,会有任何问题吗?(即使用排队的updateGL()调用事件溢出堆栈?

Mac*_*cke 5

交换通常等待vsync,所以你可以随意调用它,你不会得到剪切或工件(万一你担心).

Wrt Qt事件,要么使用QTimer设置为快速(如果没有足够快地处理事件,则默默地丢弃事件,即没有升级事件队列),或者,您可以在updateGL结束时发布重绘事件,实际上是自己调用.

后者可能不适合你,但这是确保你的油漆循环尽可能快地运行但不会更快的一种巧妙方法.;)