如何在Qt5中使QOpenGLContext在没有表面的情况下电流

How to make QOpenGLContext current without surface in Qt5?

本文关键字:表面 情况下 Qt5 中使 QOpenGLContext      更新时间:2023-10-16

我正在做一个项目,该项目将使用 OpenCL 渲染图形以在QOpenGLWidget中显示。推荐的方法似乎是在QOpenGLWidget中已经存在的QOpenGLContext旁边创建一个,然后创建一个线程,该辅助上下文可以与 OpenCL 代码一起存在。

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

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

无法使 QOpenGLContext 在不同的线程中处于当前状态

那么我应该使用什么表面呢?或者,我错过了什么,或者应该做不同的事情?

您可以为此创建和使用 QOffscreenSurface。