我正在将 OpenGL 应用程序从 win32 项目移植到 Qt 项目。
在 win32 项目中,我只是有一个主循环,只要前一帧完成,它就会继续执行下一帧。
在我找到的关于 Qt 和 OpenGL 的教程中,他们使用计时器来控制场景的更新。但是,我想尽可能频繁地渲染尽可能多的帧 - 怎么做?
但是,我想尽可能频繁地渲染尽可能多的帧 - 怎么做?
不是 Qt。Qt 完全控制了事件循环,因此不会为您提供任何直接执行空闲操作的方法。在 Qt 中执行空闲操作的标准方法是使用超时为 0 的 QTime。
另一种可能性是使用第二个线程仅用于 OpenGL 操作。但是,为了可靠地工作,您应该为该线程创建一个专用的 OpenGL 上下文。
对于那些主循环的主要任务是渲染图片而输入和事件管理只是次要的程序,Qt 根本不是正确的工具包。
尝试update()
在油漆处理程序结束时调用。
这将排队另一个重绘事件。
Qt和OpenGL的内在原则不是尽快渲染,而是随时随地渲染渲染(巨大的差异)。
您必须询问系统最大帧速率(在 OpenGL 中搜索示例,对不起,我不记得我在哪里看到的)。完成此操作后,只需根据此最大帧速率创建一个计时器,即可获得所需的内容。
但是,我想尽可能频繁地渲染尽可能多的帧 - 怎么做?
使用零间隔的 QTimer 。