【问题标题】:update Opengl window continuously不断更新OpenGL窗口
【发布时间】:2016-08-09 12:21:57
【问题描述】:

我正在使用 Qt、OpenGL 和 GLEW 在四边形上映射纹理并进行渲染。我想改变每一帧的纹理并不断更新窗口。如何强制它不断更新?

如 cmets 中所述,通过添加计时器并将其连接到插槽以发出信号更新功能来解决问题。

【问题讨论】:

  • “不断更新窗口”是什么意思?
  • 我想加载纹理并显示它,然后加载第二个纹理并显示它,依此类推。现在每次鼠标移动时它都会更新窗口。我也在使用 qt 和 OpenGL。
  • 然后你应该看看你的主循环,如果它等待一个事件或者它是否轮询一个事件。我认为 qt 默认情况下会等待一个事件,因此会阻塞你的循环。但我不确定。
  • 你如何用你的实际代码更新你的窗口?
  • edit您的问题显示what you have tried so far。您应该包含您遇到问题的代码的minimal reproducible example,然后我们可以尝试帮助解决具体问题。您还应该阅读How to Ask

标签: c++ qt opengl glew


【解决方案1】:

如果您的意思是交换缓冲区,您需要在每帧调用特定于平台的交换函数(wglSwapBuffers、glXSwapBuffers 等)并确保禁用 vsync。如果您的意思是让窗口调整大小,这不是一个开放的 gl 特定问题,这也取决于窗口系统。

【讨论】:

    【解决方案2】:

    如果您使用 qt 创建窗口并管理鼠标移动等事件,则可能会导致应用程序在重新绘制窗口之前等待事件发生。我认为您可以使用 QTimer 对象并将其超时信号连接到您的更新函数。

    否则,如果您使用某些waitEvent() 函数处理事件,请将其更改为非阻塞版本。

    【讨论】:

    • frameSwapped 上的信号可能会更好。
    • frameSwapped 只是来自QQuickWindow 的信号,我们不知道他是否在使用它。
    • 我使用的是QGLWidget,在paintGL末尾添加just update也会强制渲染继续,但这是一个好的解决方案吗?
    • 据我所知,如果你有QGLWidget,这是使用它的方式,但我从未使用 qt 和 OpenGL
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2021-04-04
    • 2022-01-22
    • 2019-02-28
    • 2017-11-23
    • 2011-02-23
    相关资源
    最近更新 更多