Я работаю над проектом, который будет использовать OpenCL для визуализации графики для отображения в QOpenGLWidget
, рекомендуемый способ чтобы сделать это, кажется, создает вторую QOpenGLContext
кроме того, который уже присутствует в QOpenGLWidget
затем создайте поток, в котором этот вторичный контекст может жить вместе с кодом OpenCL.
Таким образом, Qt может идти своим чередом, как обычно, с помощью Eventloop, запущенного в главном потоке. И всякий раз, когда QOpenGLWidget
решает нарисовать его, просто будет извлекать данные из буфера, подготовленного во втором потоке вторичным контекстом и установленным там взаимодействием OpenCL.
Все это звучит замечательно на бумаге, но у меня есть некоторые проблемы, заставляющие это работать. Мой вопрос о том, как сделать вторичный QOpenGLContext
«текущий» в теме. Так как QOpenGLContext::makeCurrent()
принимает обязательный QSurface
в качестве параметра, и единственная поверхность, которую я имею, это та, которая доступна из моего QOpenGLWidget
, но использование этого во вторичном потоке не работает. Я получаю следующую ошибку:
Невозможно сделать QOpenGLContext текущим в другом потоке
Так какую поверхность я должен использовать? Или я что-то пропустил или должен поступить иначе?
Вы можете создать и использовать QOffscreenSurface для этого.
Других решений пока нет …