如何在 Qt5 中使 QOpenGLContext 成为当前没有表面的?
How to make QOpenGLContext current without surface in Qt5?
我正在开发一个项目,该项目将使用 OpenCL 渲染图形以在 QOpenGLWidget
中显示。要做到这一点, 似乎是在 QOpenGLWidget
中已经存在的那个之外创建第二个 QOpenGLContext
,然后创建一个线程,让这个辅助上下文可以与 OpenCL 代码一起生活。
这样 Qt 就可以像往常一样在主线程中使用事件循环 运行。每当 QOpenGLWidget
决定绘制时,它会简单地从第二个线程中由辅助上下文和在那里设置的 OpenCL 互操作准备的缓冲区中获取数据。
这在理论上听起来不错,但我在实现它时遇到了一些问题。我的问题是关于如何使线程中的辅助QOpenGLContext
"current"。因为 QOpenGLContext::makeCurrent()
需要一个强制性的 QSurface
作为参数,而我唯一拥有的表面是我的 QOpenGLWidget
可用的表面,但是在辅助线程中使用它是行不通的。我收到以下错误:
Cannot make QOpenGLContext current in a different thread
那么我应该使用什么表面?或者,我是否遗漏了什么,或者应该采取不同的做法?
您可以为此目的创建和使用 QOffscreenSurface。
我正在开发一个项目,该项目将使用 OpenCL 渲染图形以在 QOpenGLWidget
中显示。要做到这一点,QOpenGLWidget
中已经存在的那个之外创建第二个 QOpenGLContext
,然后创建一个线程,让这个辅助上下文可以与 OpenCL 代码一起生活。
这样 Qt 就可以像往常一样在主线程中使用事件循环 运行。每当 QOpenGLWidget
决定绘制时,它会简单地从第二个线程中由辅助上下文和在那里设置的 OpenCL 互操作准备的缓冲区中获取数据。
这在理论上听起来不错,但我在实现它时遇到了一些问题。我的问题是关于如何使线程中的辅助QOpenGLContext
"current"。因为 QOpenGLContext::makeCurrent()
需要一个强制性的 QSurface
作为参数,而我唯一拥有的表面是我的 QOpenGLWidget
可用的表面,但是在辅助线程中使用它是行不通的。我收到以下错误:
Cannot make QOpenGLContext current in a different thread
那么我应该使用什么表面?或者,我是否遗漏了什么,或者应该采取不同的做法?
您可以为此目的创建和使用 QOffscreenSurface。