Отображение прогресса вычислений gl в qt

У меня есть процесс, который выполняет некоторые тяжелые математические вычисления с gl, а не с процессором (gl / gpu пока работает примерно в 100 раз быстрее, чем процессор), но все же это около минуты для чтобы быть готовыми к обычным размерам задач, поэтому мне нужен был хороший индикатор выполнения, чтобы знать, сколько времени это займет.

Итак, я настроил свои классы для наследования от QObject и получил сигнал currentProgress ( int) , который генерируется время от времени. К сожалению, моя программа зависает во время расчета, поэтому прогресса не видно. Я нашел решение в вызове QCoreApplication :: processEvents () , что дало мне еще одну проблему. Во время этого вызова запускается перерисовка всего окна, что приводит к тому, что мое вычисление вызывается в бесконечной рекурсии, потому что оно само запускается событием рисования.

Теперь все эти проблемы являются сигналами, которые говорят моему слоту интуиции программирования, что я вероятно, неправильно спроектировал что-то, поэтому я спрашиваю вас, как по умолчанию использовать обновляющуюся полосу выполнения в qt?

Также обратите внимание: когда я хочу передать вычисление в другой поток, мне, вероятно, нужно создать новый контекст GL или, по крайней мере, переместите существующий. Так что, если это правильный путь, может кто-нибудь объяснить мне, как этого добиться в qt?

РЕДАКТИРОВАТЬ

Чтобы прояснить ситуацию, я рисую не в QGLWidget, а использую FBO. Вероятно, лучше всего использовать собственный контекст для вычислений, но я не знаю, правильный ли это путь.

Новая информация

Итак, я попытался последовать вашему совету, но наткнулся на проблему. QGLContext , похоже, должен быть подключен к объекту screen / gui, поэтому я не могу создать один вне экрана.

Кроме того, я не могу сделать QGLWidget текущим в других потоках. Он возвращает ошибку QGLContext :: makeCurrent (): Failed. Кроме того, все статьи, о которых я читал, были людьми с такой же проблемой, как и я: они хотели выполнить рендеринг в другом потоке и не нашли решения.

5
задан Nobody 24 August 2011 в 15:17
поделиться