如何在Qt5中使QOpenGLContext在表面上不流动?

时间:2016-09-22 23:03:19

标签: c++ opengl qt5 openglcontext

我正在开发一个项目,该项目将使用OpenCL渲染图形以便在<IfModule mod_rewrite.c> RewriteEngine On #Checks to see if the user is attempting to access a valid file, #such as an image or css document, if this isn't true it sends the #request to index.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d #This last condition enables access to the images and css folders, and the robots.txt file RewriteCond $1 !^(index\.php|public|images|robots\.txt|css) RewriteRule ^(.*)$ public/index.php/$1 [L] </IfModule> 中显示。执行此操作的recommended way似乎是在QOpenGLWidget中已存在的{{}}旁边创建第二个QOpenGLContext,然后创建一个线程,其中此辅助上下文可以与OpenCL代码一起生效。< / p>

这样,Qt可以像往常一样在主线程中运行eventloop。每当QOpenGLWidget决定绘制它时,它将简单地从第二个线程中准备的缓冲区中获取数据,辅助上下文和OpenCL交互操作在那里设置。

这一切听起来都不错,但是我遇到了一些问题。我的问题是关于如何在线程中创建辅助QOpenGLWidget“当前”。因为QOpenGLContext使用强制QOpenGLContext::makeCurrent()作为参数,而我唯一的表面是我QSurface中可用的表面,但在辅助线程中使用它不起作用。我收到以下错误:

  

无法使QOpenGLContext在另一个线程中保持最新状态

那么我应该使用什么表面?或者,我错过了什么,或者应该做些什么?

1 个答案:

答案 0 :(得分:3)

您可以为此目的创建和使用QOffscreenSurface