假设我使用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/