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