Qt 线程间OpenGL上下文共享延迟
我有一个非常简单的Qt/OpenGL设置,我的GUI线程可以在工作线程中请求纹理上传。一旦纹理可用,工作线程就会发出信号返回,GUI线程就可以使用它 不幸的是,有时似乎需要大约50毫秒的时间才能在GUI上下文中完全共享纹理。在这种情况下,绑定纹理的一部分显示为黑色。引入等待计时器有效地解决了问题,但自然会减慢处理速度。对于所需的等待时间没有明显的模式,因此我想知道是否有方法可以确定纹理实际上是否已准备好绑定到共享上下文中 我的设置如下所示: 在应用程序的早期,我通过调用Qt 线程间OpenGL上下文共享延迟,qt,opengl,qt5,Qt,Opengl,Qt5,我有一个非常简单的Qt/OpenGL设置,我的GUI线程可以在工作线程中请求纹理上传。一旦纹理可用,工作线程就会发出信号返回,GUI线程就可以使用它 不幸的是,有时似乎需要大约50毫秒的时间才能在GUI上下文中完全共享纹理。在这种情况下,绑定纹理的一部分显示为黑色。引入等待计时器有效地解决了问题,但自然会减慢处理速度。对于所需的等待时间没有明显的模式,因此我想知道是否有方法可以确定纹理实际上是否已准备好绑定到共享上下文中 我的设置如下所示: 在应用程序的早期,我通过调用 QCoreApplica
QCoreApplication::setAttribute( Qt::AA_ShareOpenGLContexts );
在工作线程中,我创建一个上下文并将其挂接到globalShareContext
QOpenGLContext context;
context->setShareContext( QOpenGLContext::globalShareContext() );
然后,我使用QOpenGLTexture
的上传功能之一将纹理数据移动到GPU,并最终将其绑定到GUI线程中
不幸的是,有时似乎需要大约50毫秒的时间才能在GUI上下文中完全共享纹理
这里有几个问题
glFinish()
命令,这将强制GL处理仍然在队列中的所有命令,并阻止调用线程直到完成
然而,现在有一个更好的解决方案