multithreading - QGLWidget的paintGL()方法从哪个Qt线程调用?

标签 multithreading qt opengl rendering qglwidget

假设我使用QGLWidget的paintGL()方法来使用OpenGL绘制窗口小部件。 Qt调用paintGL()方法后,它将自动触发缓冲区交换。在OpenGL中,此缓冲区交换通常会阻塞调用线程,直到完成对背景缓冲区的帧渲染,对吗?我想知道哪个Qt线程调用paintGL以及缓冲区交换。它是主要的Qt UI线程吗?如果是,这是否意味着缓冲区交换期间的块也将阻塞整个UI?一般来说,我找不到有关此过程的任何信息。

谢谢

最佳答案

我不经常使用QGLWidget,但可以认为,如果swapBuffers()是同步的,则Qt GUI线程会卡住。这意味着在该操作期间,您将无法处理事件。

无论如何,如果您在执行此操作时遇到困难,请考虑阅读this article,它可以使多线程OpenGL克服这一困难。

更好的是,this article很好地说明了这种情况,并在Qt 4.8中引入了新的多线程OpenGL功能,该功能现在已发布。

关于multithreading - QGLWidget的paintGL()方法从哪个Qt线程调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7780418/

相关文章:

Java Thread Ping Pong 示例

具有多个可以在线程中执行的方法的 Java 类

c++ - 在 Qt 中将文件保存到网络

c++ - 通过 fread 将 jpg/png 读入点数组

objective-c - 将现有的 opengl 纹理与 scenekit 一起使用

multithreading - 将 error_chain 与 JoinHandle 一起使用

如果服务器不读取,Java 客户端套接字写入将被跳过

qt - 如何将 QModelIndex 与新行关联?

c++ - OpenGL 翻译不生效

c++ - 未定义的 wgl 函数引用