Как сделать QOpenGLContext текущим без поверхности в Qt5?

Я работаю над проектом, который будет использовать OpenCL для визуализации графики для отображения в QOpenGLWidget, рекомендуемый способ чтобы сделать это, кажется, создает вторую QOpenGLContext кроме того, который уже присутствует в QOpenGLWidgetзатем создайте поток, в котором этот вторичный контекст может жить вместе с кодом OpenCL.

Таким образом, Qt может идти своим чередом, как обычно, с помощью Eventloop, запущенного в главном потоке. И всякий раз, когда QOpenGLWidget решает нарисовать его, просто будет извлекать данные из буфера, подготовленного во втором потоке вторичным контекстом и установленным там взаимодействием OpenCL.

Все это звучит замечательно на бумаге, но у меня есть некоторые проблемы, заставляющие это работать. Мой вопрос о том, как сделать вторичный QOpenGLContext «текущий» в теме. Так как QOpenGLContext::makeCurrent() принимает обязательный QSurface в качестве параметра, и единственная поверхность, которую я имею, это та, которая доступна из моего QOpenGLWidget, но использование этого во вторичном потоке не работает. Я получаю следующую ошибку:

Невозможно сделать QOpenGLContext текущим в другом потоке

Так какую поверхность я должен использовать? Или я что-то пропустил или должен поступить иначе?

1

Решение

Вы можете создать и использовать QOffscreenSurface для этого.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]