我正在开发一个项目,该项目将使用 OpenCL 渲染图形以在QOpenGLWidget
. 执行此操作的推荐方法似乎是QOpenGLContext
在 . 中已经存在的那个旁边创建第二个QOpenGLWidget
,然后创建一个线程,这个辅助上下文可以与 OpenCL 代码一起存在。
这样,Qt 就可以像往常一样在主线程中运行事件循环。并且无论何时QOpenGLWidget
决定绘制它都会简单地从第二个线程中由辅助上下文和在那里设置的 OpenCL 互操作准备的缓冲区中获取数据。
这一切在纸上听起来都很棒,但我在让它发挥作用时遇到了一些问题。我的问题是关于如何使QOpenGLContext
线程中的辅助“当前”。因为QOpenGLContext::makeCurrent()
需要强制QSurface
作为参数,而我拥有的唯一表面是 my 可用的表面QOpenGLWidget
,但在辅助线程中使用它不起作用。我收到以下错误:
不能在不同的线程中使 QOpenGLContext 当前
那么我应该使用什么表面呢?或者,有什么我错过的,或者应该做不同的事情吗?