Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Sancho_s_rancho от Октябрь 23, 2010, 12:17



Название: [Решено]QGraphicsSvgItem -- тормоза на нескольких сотнях элементов
Отправлено: Sancho_s_rancho от Октябрь 23, 2010, 12:17
Нарисовал несложную векторную картинку (размер 50 на 500).
Создаю несколько сотен элементов QGraphicsSvgItem с этой картинкой и раскидываю по сцене.
Тормоза наблюдаются уже при запуске приложения( на селерон 1600 - десятки секунд). И начинает дико жраться память.
Если такая петрушка на настольном, то кпк какой-нибудь умрет уже от десятка - другого, а ежели и не умрет, то посадит батарею.
QGraphicsScene не рассчитан на несколько сотен QGraphicsSvgItem? Нужны какие-то загадочные параметры кэширования?


Название: Re: QGraphicsSvgItem -- тормоза на нескольких сотнях элементов
Отправлено: kamre от Октябрь 23, 2010, 14:35
Нарисовал несложную векторную картинку (размер 50 на 500).
Что такое "50 на 500"? Сложность векторной картинки не определяется размерами в пикселях, на то она и векторная. Важно количество и сложность "векторных" элементов.

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


Название: Re: QGraphicsSvgItem -- тормоза на нескольких сотнях элементов
Отправлено: Sancho_s_rancho от Октябрь 23, 2010, 15:30
Картинка достаточно простая. Попробую сделать примитивной.
Увеличение, поворот и минимальная анимация весьма желательна. Собственно из-за этих фишек я и полез в графикс вью. А без эффектов я эту ерунду и с QPainter, и на WinApi нарисую, т.к. растровую картинку отресайзить да в нужном месте нарисовать много ума не надо.
пи.си. Параметры кэширования менять пробовал, но желаемого эффекта не получил.


Название: Re: QGraphicsSvgItem -- тормоза на нескольких сотнях элементов
Отправлено: ufna от Октябрь 23, 2010, 16:37
QGV в принципе для мобильников не лучшее решение.


Название: Re: QGraphicsSvgItem -- тормоза на нескольких сотнях элементов
Отправлено: kamre от Октябрь 23, 2010, 16:40
Картинка достаточно простая. Попробую сделать примитивной.
Увеличение, поворот и минимальная анимация весьма желательна.
Вообще векторная графика с качественным antialising весьма тормозная, т.к. видеокарты для нее почти не приспособлены. Можно поставить QGLWidget как viewport, тогда на хороших видеокартах будет в несколько раз быстрее рисоваться.

А пример 40000 chips насколько хорошо работает? И как будет себя вести, если сократить количество chips до нескольких сотен?


Название: Re: QGraphicsSvgItem -- тормоза на нескольких сотнях элементов
Отправлено: Sancho_s_rancho от Октябрь 23, 2010, 16:57
QGV в принципе для мобильников не лучшее решение.
Что предлагаете?


Название: Re: QGraphicsSvgItem -- тормоза на нескольких сотнях элементов
Отправлено: Sancho_s_rancho от Октябрь 23, 2010, 17:10
Картинка достаточно простая. Попробую сделать примитивной.
Увеличение, поворот и минимальная анимация весьма желательна.
Вообще векторная графика с качественным antialising весьма тормозная, т.к. видеокарты для нее почти не приспособлены. Можно поставить QGLWidget как viewport, тогда на хороших видеокартах будет в несколько раз быстрее рисоваться.

А пример 40000 chips насколько хорошо работает? И как будет себя вести, если сократить количество chips до нескольких сотен?
Хорошо работает, но там все-таки не SVG.
пи.си. Надо без OpenGL, т.к. надеяться на крутую видюху в кпк не приходится


Название: Re: QGraphicsSvgItem -- тормоза на нескольких сотнях элементов
Отправлено: kamre от Октябрь 23, 2010, 17:12
Картинка достаточно простая. Попробую сделать примитивной.
А что за картинка? Можно глянуть?


Название: Re: QGraphicsSvgItem -- тормоза на нескольких сотнях элементов
Отправлено: Sancho_s_rancho от Октябрь 23, 2010, 17:26
Картинка достаточно простая. Попробую сделать примитивной.
А что за картинка? Можно глянуть?
Смотрите в приложении


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


Название: Re: QGraphicsSvgItem -- тормоза на нескольких сотнях элементов
Отправлено: ufna от Октябрь 23, 2010, 18:29
Что предлагаете?

Для мобильников - только и только QPainter, там где нужна хоть какая-то анимация и не тормознутость.


Название: Re: QGraphicsSvgItem -- тормоза на нескольких сотнях элементов
Отправлено: ufna от Октябрь 23, 2010, 18:30
А SVG и прочее - сразу уже делать на флеше, а не встраивать это в приложения. Сама технология там не айс, что уж говорить когда этих объектов на сцене куча.


Название: Re: QGraphicsSvgItem -- тормоза на нескольких сотнях элементов
Отправлено: GreatSnake от Октябрь 24, 2010, 13:20
Попробуй перед запуском выставить QT_FLUSH_PAINT=1 переменную среды.
Сразу увидишь как делается обновление сцены.


Название: Re: [Решено]QGraphicsSvgItem -- тормоза на нескольких сотнях элементов
Отправлено: Sancho_s_rancho от Октябрь 24, 2010, 19:45
Вопрос снят с повестки дня  :)
QGraphicsSvgItem существует для галочки. Сделать на нем что-то более-менее приемлемое не получится.
Хорошая заметка об оптимизации QGraphicsView для слабеньких машин можно найти тут: http://labs.danilocesar.com/blog/2010/09/19/symbian-2d-games-and-qt-optimization-flags/
 (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 (http://developer.symbian.org/wiki/Creating_Energy_Efficient_Apps_Using_Qt)


Название: Re: [Решено]QGraphicsSvgItem -- тормоза на нескольких сотнях элементов
Отправлено: ufna от Октябрь 25, 2010, 22:14
Статья про оптимизацию хорошая, но проблема как была так и остается - даже со всеми этими оптимизационными проектами QGV будет работать шустро только на новых мобильниках, а на старых будет УГ :(