Название: QPatinterPath и производительность Отправлено: kamil от Январь 01, 2016, 14:36 Есть QGraphicsView с несколькими QGraphicsItem, с которыми была небольшая проблема: программа кушала почти 60% одного ядра, хотя нечего сверхъестественного она не делала. QGraphicsView просто отрисовывал HUD поверх видео.
При помощи профайлера выяснилось что основная проблема в операциях объединения, пересечения и вычитания QPatinterPath. Все для отрисовки HUD было подготовленно в QPatinterPath и в момент отрисовки только обводилось и заполнялось. Но чтобы одни части HUD не перекрывали другие и не возникало каши, перед отрисовкой QPatinterPath пересекался (.intersect() или operator&) с QPatinterPath, в котором хранилась форма видимой части (от шкалы тангажа, например, в каждый момент времени отрисовывается только промежуток ~40 градусов а в его QPatinterPath хранится полностью отрисованная версия от -90 до 90 градусов). Например: (http://cdn-www.airliners.net/aviation-photos/photos/7/7/0/1465077.jpg) Тут шкала тангажа (горизонтальные полоски по центру) с искусственным горизонтом не должна налазить на компас и на шкалу крена (полоски по кругу сверху). Как убирать не нужные части QPatinterPath, не используя пересечения с другим QPainterPath? Можно ли стирать, что уже нарисовано? Или может можно как-то ускорить работу пересечения? Пока мне в голову идет только каждый раз рисовать шкалу заново, с учетом ограничений в данный момент времени. Название: Re: QPatinterPath и производительность Отправлено: GreatSnake от Январь 01, 2016, 20:42 Может задействовать Clipping (http://doc.qt.io/qt-4.8/qpainter.html#clipping)?
Название: Re: QPatinterPath и производительность Отправлено: kamil от Январь 02, 2016, 04:52 Может задействовать Clipping (http://doc.qt.io/qt-4.8/qpainter.html#clipping)? Спасибо, то что надо. |