Russian Qt Forum
Сентябрь 30, 2024, 08:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено]QGraphicsSvgItem -- тормоза на нескольких сотнях элементов  (Прочитано 7429 раз)
Sancho_s_rancho
Гость
« : Октябрь 23, 2010, 12:17 »

Нарисовал несложную векторную картинку (размер 50 на 500).
Создаю несколько сотен элементов QGraphicsSvgItem с этой картинкой и раскидываю по сцене.
Тормоза наблюдаются уже при запуске приложения( на селерон 1600 - десятки секунд). И начинает дико жраться память.
Если такая петрушка на настольном, то кпк какой-нибудь умрет уже от десятка - другого, а ежели и не умрет, то посадит батарею.
QGraphicsScene не рассчитан на несколько сотен QGraphicsSvgItem? Нужны какие-то загадочные параметры кэширования?
« Последнее редактирование: Октябрь 24, 2010, 19:35 от Sancho_s_rancho » Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #1 : Октябрь 23, 2010, 14:35 »

Нарисовал несложную векторную картинку (размер 50 на 500).
Что такое "50 на 500"? Сложность векторной картинки не определяется размерами в пикселях, на то она и векторная. Важно количество и сложность "векторных" элементов.

QGraphicsScene не рассчитан на несколько сотен QGraphicsSvgItem? Нужны какие-то загадочные параметры кэширования?
Если не нужен zoom и rotate для элементов, то они фактически могут быть картинками и тогда все будет работать быстро, хотя и памяти будет потребляться больше. Нужно попробовать включить режимы кэширования: http://doc.qt.nokia.com/latest/qgraphicsitem.html#CacheMode-enum
Записан
Sancho_s_rancho
Гость
« Ответ #2 : Октябрь 23, 2010, 15:30 »

Картинка достаточно простая. Попробую сделать примитивной.
Увеличение, поворот и минимальная анимация весьма желательна. Собственно из-за этих фишек я и полез в графикс вью. А без эффектов я эту ерунду и с QPainter, и на WinApi нарисую, т.к. растровую картинку отресайзить да в нужном месте нарисовать много ума не надо.
пи.си. Параметры кэширования менять пробовал, но желаемого эффекта не получил.
Записан
ufna
Гость
« Ответ #3 : Октябрь 23, 2010, 16:37 »

QGV в принципе для мобильников не лучшее решение.
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #4 : Октябрь 23, 2010, 16:40 »

Картинка достаточно простая. Попробую сделать примитивной.
Увеличение, поворот и минимальная анимация весьма желательна.
Вообще векторная графика с качественным antialising весьма тормозная, т.к. видеокарты для нее почти не приспособлены. Можно поставить QGLWidget как viewport, тогда на хороших видеокартах будет в несколько раз быстрее рисоваться.

А пример 40000 chips насколько хорошо работает? И как будет себя вести, если сократить количество chips до нескольких сотен?
Записан
Sancho_s_rancho
Гость
« Ответ #5 : Октябрь 23, 2010, 16:57 »

QGV в принципе для мобильников не лучшее решение.
Что предлагаете?
Записан
Sancho_s_rancho
Гость
« Ответ #6 : Октябрь 23, 2010, 17:10 »

Картинка достаточно простая. Попробую сделать примитивной.
Увеличение, поворот и минимальная анимация весьма желательна.
Вообще векторная графика с качественным antialising весьма тормозная, т.к. видеокарты для нее почти не приспособлены. Можно поставить QGLWidget как viewport, тогда на хороших видеокартах будет в несколько раз быстрее рисоваться.

А пример 40000 chips насколько хорошо работает? И как будет себя вести, если сократить количество chips до нескольких сотен?
Хорошо работает, но там все-таки не SVG.
пи.си. Надо без OpenGL, т.к. надеяться на крутую видюху в кпк не приходится
« Последнее редактирование: Октябрь 23, 2010, 17:28 от Sancho_s_rancho » Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #7 : Октябрь 23, 2010, 17:12 »

Картинка достаточно простая. Попробую сделать примитивной.
А что за картинка? Можно глянуть?
Записан
Sancho_s_rancho
Гость
« Ответ #8 : Октябрь 23, 2010, 17:26 »

Картинка достаточно простая. Попробую сделать примитивной.
А что за картинка? Можно глянуть?
Смотрите в приложении
Записан
Sancho_s_rancho
Гость
« Ответ #9 : Октябрь 23, 2010, 18:10 »

Опишу задачу целиком.
Делаю игру спички. Правила просты: пирамида из 9 (11) рядов спичек. на вершине - одна и далее +2 до основания. Берут по очереди только из одной кучи (можно взять кучу целиком). Проигрывает тот, кто берет последнюю спичку.
Раз это игрушка, то желательна хоть минимальная анимация и эффекты. С QGraphicsSvgItem анимация тормозит даже на настольном аппарате. Если в полтора раза увеличить кол-во рядов, то подтормаживать начинает и ресайз.
Как вариант - забыть про QGraphicsSvgItem и сделать, как в 40000 Chips, но  по большому счету это не выход, т.к. ежели спичку я еще нарисую с QPainter, то какую-нибудь карточную игру таким макаром можно делать до седого лобка.
« Последнее редактирование: Октябрь 23, 2010, 18:11 от Sancho_s_rancho » Записан
ufna
Гость
« Ответ #10 : Октябрь 23, 2010, 18:29 »

Что предлагаете?

Для мобильников - только и только QPainter, там где нужна хоть какая-то анимация и не тормознутость.
Записан
ufna
Гость
« Ответ #11 : Октябрь 23, 2010, 18:30 »

А SVG и прочее - сразу уже делать на флеше, а не встраивать это в приложения. Сама технология там не айс, что уж говорить когда этих объектов на сцене куча.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Октябрь 24, 2010, 13:20 »

Попробуй перед запуском выставить QT_FLUSH_PAINT=1 переменную среды.
Сразу увидишь как делается обновление сцены.
Записан

Qt 5.11/4.8.7 (X11/Win)
Sancho_s_rancho
Гость
« Ответ #13 : Октябрь 24, 2010, 19:45 »

Вопрос снят с повестки дня  Улыбающийся
QGraphicsSvgItem существует для галочки. Сделать на нем что-то более-менее приемлемое не получится.
Хорошая заметка об оптимизации QGraphicsView для слабеньких машин можно найти тут: http://labs.danilocesar.com/blog/2010/09/19/symbian-2d-games-and-qt-optimization-flags/

И немного тут: http://developer.symbian.org/wiki/Creating_Energy_Efficient_Apps_Using_Qt
Записан
ufna
Гость
« Ответ #14 : Октябрь 25, 2010, 22:14 »

Статья про оптимизацию хорошая, но проблема как была так и остается - даже со всеми этими оптимизационными проектами QGV будет работать шустро только на новых мобильниках, а на старых будет УГ Грустный
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.146 секунд. Запросов: 23.