Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: QCasper от Февраль 07, 2007, 14:42



Название: QPainter в негуёвом потоке
Отправлено: QCasper от Февраль 07, 2007, 14:42
Мне нужно рисовать QPainter'ом поток картинок, из которых в дальнейшем строится анимация. Чтобы никакие внешние воздействия, то как юзер потягал окно,  не тормозили это дело, я решил делать это в отдельном потоке. QPainter орет, что мол варнинг, не стоит рисовать в негуёвом потоке. Как же быть?


Название: QPainter в негуёвом потоке
Отправлено: Tonal от Февраль 07, 2007, 15:33
Может можно QMovie подпрячь?


Название: QPainter в негуёвом потоке
Отправлено: QCasper от Февраль 07, 2007, 15:35
Цитата: "Tonal"
Может можно QMovie подпрячь?


А в чем оно может помочь. Дело в том, что анимация не обязательно выводится на окно. Она может выводиться напрямую на видеокарту или в файл


Название: QPainter в негуёвом потоке
Отправлено: QCasper от Март 12, 2007, 09:40
Тема все еще актуальна. Хочу вопрос немного по другому поставить.
Кто может грамотно объяснить мне, почему опасно использовать QPainter в негуевом потоке?


Название: QPainter в негуёвом потоке
Отправлено: ElderOrb от Март 12, 2007, 12:53
Насколько я понимаю дело в поддержке двойной буфферизации и наличии backing-store (глобальных кэширующих пиксмэпов по штуке на каждое top-level окно, необходимых для быстрой отрисовки сложных виджэтов при их перетягивании).

Двойная буфферизация представляет собой отрисовку в память (в QImage или QPixmap в случае с Qt) с последующим копированием этого куска памяти в контекст видеоустройства и условно может быть поделена на 3 фазы.

1. начало отрисовки (подготовка внеэкранного буфера)
2. отрисовка во внеэкранный буфер
3. конец отрисовки

Вышенаписанное может быть потокобезопасным но только если защищено элементами синхронизации, а это дегрэйд перфоманса. А перфоманс - это наше всё. Возможно если сильно поизвращаться можно обойтись и без элементов синхронизации и потери производительности, что и собираются сделать тролли в 5-ом Qt. Поживём - увидим как. ж)