Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: alexman от Июль 20, 2010, 22:06



Название: Ускорение сглаживания при рисовке линий.
Отправлено: alexman от Июль 20, 2010, 22:06
Есть наследник от QGraphicsItem, в котором переопределяю функцию
Код:
void QGraphicsItem::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 )

Внутри рисую много линий
Код:
...painter->drawLines( ... );...

Проблема заключается в том, что если включить сглаживание
Код:
painter->setRenderHint( QPainter::Antialiasing );
то рисовка работает медленно. Как ускорить рисовку со сглаживанием?

P.S. Как использовать QPainter::HighQualityAntialiasing?


Название: Re: Ускорение сглаживания при рисовке линий.
Отправлено: GreatSnake от Июль 21, 2010, 09:59
Для начала укажите платформу и версию Qt.


Название: Re: Ускорение сглаживания при рисовке линий.
Отправлено: alexman от Июль 21, 2010, 14:37
qt 3.6.2
Windows XP
В качестве viewport для QGraphicsView установлен QGLWidget.


Название: Re: Ускорение сглаживания при рисовке линий.
Отправлено: GreatSnake от Июль 21, 2010, 14:44
Цитировать
qt 3.6.2
Наверное всё-таки 4.6.2?


Название: Re: Ускорение сглаживания при рисовке линий.
Отправлено: GreatSnake от Июль 21, 2010, 16:11
Помнится здесь (http://www.prog.org.ru/topic_11954_0.html) обсуждали аналогичные тормоза при использовании QPainter::drawPolyline().
Потом выяснилось, что тролли подтвердили проблему:
Цитировать
Short of replacing the Freetype rasterizer or add some hacks that will only work in certain edge cases there's not much that can be done. I recommend that you instead draw the polyline as individual line segments using QPainter::drawLine, then the stroked outline won't be treated as one big complex path and performance should be way better.
Вполне возможно, что корни проблем одни и те же.
Попробуйте рисовать линии отдельно.


Название: Re: Ускорение сглаживания при рисовке линий.
Отправлено: alexman от Июль 21, 2010, 16:25
Цитировать
qt 3.6.2
Наверное всё-таки 4.6.2?
Сорри


Название: Re: Ускорение сглаживания при рисовке линий.
Отправлено: alexman от Июль 21, 2010, 16:37
Помнится здесь (http://www.prog.org.ru/topic_11954_0.html) обсуждали аналогичные тормоза при использовании QPainter::drawPolyline().
Потом выяснилось, что тролли подтвердили проблему:
Цитировать
Short of replacing the Freetype rasterizer or add some hacks that will only work in certain edge cases there's not much that can be done. I recommend that you instead draw the polyline as individual line segments using QPainter::drawLine, then the stroked outline won't be treated as one big complex path and performance should be way better.
Вполне возможно, что корни проблем одни и те же.
Попробуйте рисовать линии отдельно.
Разницы не заметил! Тормозов нет, если отключить сглаживание!


Название: Re: Ускорение сглаживания при рисовке линий.
Отправлено: GreatSnake от Июль 21, 2010, 16:40
Цитировать
Разницы не заметил!
Разницы в чём?

Цитировать
Тормозов нет, если отключить сглаживание!
Со сглаживанием в любом случае будет медленнее, чем без него.


Название: Re: Ускорение сглаживания при рисовке линий.
Отправлено: alexman от Июль 21, 2010, 17:28
Цитировать
Разницы не заметил!
Разницы в чём?
Рисовка также тормозит! То есть проблема остается!


Название: Re: Ускорение сглаживания при рисовке линий.
Отправлено: GreatSnake от Июль 21, 2010, 17:38
т.е. после использования drawLine() вместо drawLines() абсолютно такие же тормоза?