RazrFalcon
9.10.2012, 1:41
Итак. Есть сцена, в drawBackground которой вручную, через QPainter, рисуются квадратики размерами 1 на 1 поинт.
Этих квадратов допустим 100 тысяч. Я их набиваю в QVarLengthArray<QRectF, 1000>, а потом разом рисую через drawRects, что позволяет ускорить отрисовку в 1.5-2 раза.
Проблема в том, что отрисовка все равно занимает несколько секунд, иногда даже почти минуту, квадратиков то валом, и может, теоретически, быть еще больше.
Вопрос: как максимально быстро отрисовать тучу элементов на сцене? Можно не на сцене, если это будет быстрее. Рисунок статичный, рисовать можно хоть на QWidget.
Кроме описанных выше оптимизаций - других не знаю... Пробовал еще viewport на QGL менять, стало в 6-ь раз медленнее, не знаю почему.
Алексей1153
9.10.2012, 7:29
быстрее отрисовать, мне кажется, на "голом" QPainter , без всяких сцен
если скорость не устроит, попробуй сканирование кадра по принципу трассировки лучей
http://ru.wikipedia.org/wiki/%D0%A2%D1%80%...%87%D0%B5%D0%B9ведь, по сути, ты вместо 100000 пикселей рисуешь 100000 прямоугольников. А трассировка превратит всё именно в отрисовку пикселей. Пикселы можно накопить и вывалить разом через OGL
RazrFalcon
9.10.2012, 15:02
Сцена пока используется для перемещение по ней и для зума. И как это сделать в обычном пеинтер - я хз.
Да и GL прикручивать - это последний вариант уже.
Алексей1153
9.10.2012, 16:44
RazrFalcon, всё зависит от того, какой там зум используется, и какое перемещение. Если простенько всё - то можно и сделать.
Цитата(RazrFalcon @ 9.10.2012, 18:02)
Да и GL прикручивать - это последний вариант уже.
да ладно ? Когда это использование видюхи стало зазорно ? ) Для этого она и предназначена. И видюха умеет отрисовывать громадное количество полигонов в режиме реального времени
Может быть поконкретнее задачу расскажешь , кстати ? Зачем тебе прямоугольники - точки
RazrFalcon
9.10.2012, 20:27
Я просто никогда с GL не сталкивался, по этому хотелось бы пока без него обойтись.
Алексей1153
9.10.2012, 20:44
ну а с другой стороны - столкнёшься, разберёшься и перестанешь бояться
RazrFalcon
11.10.2012, 17:20
Осилил GL. Через GL_LINE_LOOP понарисовывал валом квадратиков. На глаз раз в 10 быстрее чем просто сцена.
Ну и надо еще поискать твики самого GL.
Ман использовал этот:
Работа с OpenGL на Qt 4 (часть 1)
Litkevich Yuriy
12.10.2012, 7:50
А у меня пример "4000 микросхем", из демок Qt, работает без проблем. И там Сцена-представление используется. Копай.