【发布时间】:2015-04-18 20:34:54
【问题描述】:
我正在使用 C++、Qt 和 OpenGL 编写着色器编辑器。我希望渲染的场景是交互式的,并且我希望用户能够使用来自周围环境的变量,例如鼠标坐标或窗口尺寸。
就目前而言,每次基本上有任何类型的输入(鼠标移动、窗口聚焦、按键等)时,都会重绘 OpenGL 小部件。这就是 Qt 的渲染正常工作的方式。
但是,我还想让用户使用定期更改的输入其值不依赖于用户交互,例如系统时间、随机数,甚至可能是网络摄像头。为了以有意义的方式做到这一点,我必须定期更新屏幕(事实上,我可能会让用户自定义)。
如果用户输入触发了渲染,而计时器也触发了渲染,或者反之亦然,那么我将面临竞争条件。 如何避免这种情况?
【问题讨论】:
-
如果用户输入触发了渲染,而计时器也触发了渲染,反之亦然,那么我将面临竞争条件。 你为什么这么认为?每当场景依赖的东西发生变化时,只需
update()gl 小部件即可。这会将更新事件发布到事件队列中,并且此类事件被压缩,因此无论您多久调用一次update,一旦事件循环重新获得控制,将只有一次重新渲染。简单的。如果您要求其他内容,请使用相关详细信息或代码更新问题。 “渲染场景”——在哪里?在QGLWidget或QOpenGLWidget上,或者?
标签: c++ qt opengl frame-rate