powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
25 сообщений из 33, страница 1 из 2
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39961958
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!

Озадачился ускорением вывода серии (многие тысячи) отрезков прямых на канву. У всех одинаковые параметры пера. Вот как чувствовал, что найду такую функцию. И нашел ведь: PolyDraw function

Завтра проверю как до компа доберусь. А пока выражу удивление: на всем SQL.RU ни одного топика если искать по PolyDraw !!!
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39961959
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно мало кому (если вообще такие есть) нужно "выводить серии (многие тысячи) отрезков прямых на канву". Проще нарисовать черный квадрат. Что собственно одно и то же. Ну разве только размеры канвы немерянные.
Имхо.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39961962
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,

GDI для графики так себе подходит.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39961968
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот что рисую: на карте филиалы надо соединить с "нодами". Всё было до сих пор через GDI и достаточно быстро: и OSM-овские тайлы с PNG, и филиалы. Подготавливаю битмап и одним махом отрисовываю его в событии OnPaint. Но с этими линиями просто тормоза какие то сказочные. И учитывая, что все остальное через GDI, я и ищу GDI-шное решение.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39961994
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён
Приветствую!

Озадачился ускорением вывода серии (многие тысячи) отрезков прямых на канву. У всех одинаковые параметры пера. Вот как чувствовал, что найду такую функцию. И нашел ведь: PolyDraw function

Завтра проверю как до компа доберусь. А пока выражу удивление: на всем SQL.RU ни одного топика если искать по PolyDraw !!!

Для серии отрезков есть PolyPolyLine().
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962026
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это заменитель серии MoveTo..LineTo..LineTo..LineTo..
А PolyDraw для каждой точки из массива вторым массивом получает инфу, что это за точка: MoveTo или LineTo
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962033
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён
Это заменитель серии MoveTo..LineTo..LineTo..LineTo..
А PolyDraw для каждой точки из массива вторым массивом получает инфу, что это за точка: MoveTo или LineTo
Заменитель - это PolyLine. А PolyPolyLine - именно серия ломаных (отрезков). Разница с PolyDraw в том, что в последней есть сглаживание сплайнами Безье.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962068
MBo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBo
Гость
> в последней есть сглаживание сплайнами Безье.

Не сглаживание, а просто путь может включать в себя как прямые, так и кривые Безье
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962119
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBo
Не сглаживание, а просто путь может включать в себя как прямые, так и кривые Безье
Это ценнейшее уточнение.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962140
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик СемёнНо с этими линиями просто тормоза какие то сказочные.

А надо рисовать только те, которые попадают в ClipRect.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962282
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кроик Семён,

Если линии горизонтальные вертикальные, то я отрисовывал в GDI через

Windows.PatBlt

Работает на порядок быстрее чем LineTo.

Анализировал линии на ортогональность и вызывал нужный метод.

Быстрее чем LineTo нарисовать штатными средствами вряд получится - нужен другой растеризатор.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962290
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
А надо рисовать только те, которые попадают в ClipRect.
Винда это сама проверит.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962301
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Соколинский Борис,

Не совсем там, Винда проверит непосредственно рисование, но к нему надо подготовиться - сделать какие то вычисления, подготовить Pen, Brush. Это тоже занимает время , и это надо отфильтровывать.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962332
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2
Соколинский Борис,

Не совсем там, Винда проверит непосредственно рисование, но к нему надо подготовиться - сделать какие то вычисления, подготовить Pen, Brush. Это тоже занимает время , и это надо отфильтровывать.


Джипег/пнг какой-нибуть подготовить к рисованию - получить из него битмап. Много чего может оказаться делать не надо.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962341
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2

Не совсем там, Винда проверит непосредственно рисование, но к нему надо подготовиться - сделать какие то вычисления, подготовить Pen, Brush. Это тоже занимает время , и это надо отфильтровывать.
По сравнению с собственно рисованием это такие копейки, которые не имеет смысла обсуждать.
Да и скорость векторной отрисовки, в целом, тоже.
У ТС, вероятно, интегрированный видеочип, а там все адски медленно. Самая дешевая видеокарта спасет ОРД.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962342
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock

Джипег/пнг какой-нибуть подготовить к рисованию - получить из него битмап. Много чего может оказаться делать не надо.
Виндовый движок (GDI+) достаточно умный чтобы в этом месте не делать лишних действий.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962364
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
YuRock

Джипег/пнг какой-нибуть подготовить к рисованию - получить из него битмап. Много чего может оказаться делать не надо.
Виндовый движок (GDI+) достаточно умный чтобы в этом месте не делать лишних действий.


Но он адски медленный когда дело касается dashed/dotted
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962366
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov
Но он адски медленный когда дело касается dashed/dotted
Не замечал.
Меня взбесило то, что у него не хватает мозгов кэшировать растры для повторной отрисовки, и на этом была поставлена точка.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962525
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён
Приветствую!

Озадачился ускорением вывода серии (многие тысячи) отрезков прямых на канву. У всех одинаковые параметры пера. Вот как чувствовал, что найду такую функцию. И нашел ведь: PolyDraw function

Завтра проверю как до компа доберусь. А пока выражу удивление: на всем SQL.RU ни одного топика если искать по PolyDraw !!!
было дело, так и выводил - гораздо быстрее
а какие тут вопросы могут быть? функция без подводных камней
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962681
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Соколинский Борис
swame2

Не совсем там, Винда проверит непосредственно рисование, но к нему надо подготовиться - сделать какие то вычисления, подготовить Pen, Brush. Это тоже занимает время , и это надо отфильтровывать.
По сравнению с собственно рисованием это такие копейки, которые не имеет смысла обсуждать.

Это не копейки, если в области перерисовки находится малая часть выводимой графики.
Если не отсекать, то подготовительные операции придется делать для ВСЕХ элементов, а рисовать малую часть, доля

Соколинский Борис

Да и скорость векторной отрисовки, в целом, тоже.
У ТС, вероятно, интегрированный видеочип, а там все адски медленно. Самая дешевая видеокарта спасет ОРД.

Растеризация рисования линий что GDI что GDI+ происходит на процессоре, видеокарта ничем не поможет.
Реальное из штатных графических движков Delphi (кроме FMX) аппаратное ускорение дает только Direct2D
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962769
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2

Это не копейки, если в области перерисовки находится малая часть выводимой графики.
Если не отсекать, то подготовительные операции придется делать для ВСЕХ элементов, а рисовать малую часть.
Вы полагаете, разработчики движка не догадались сначала проверить что попадает в область, а потом проводить операции?
Что-то мне подсказывает, что для этого даже IQ Фореста Гампа бы хватило.

Соколинский Борис

Растеризация рисования линий что GDI что GDI+ происходит на процессоре, видеокарта ничем не поможет.
Сие откуда следует?
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962773
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2,Растеризация рисования линий что GDI что GDI+ происходит на процессоре, видеокарта ничем не поможет.

Это неверно. GDI рисует видюха, GDI+ - процессор.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962816
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon
Это неверно. GDI рисует видюха, GDI+ - процессор.

Точно не наоборот?
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962951
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
swame2

Это не копейки, если в области перерисовки находится малая часть выводимой графики.
Если не отсекать, то подготовительные операции придется делать для ВСЕХ элементов, а рисовать малую часть.
Вы полагаете, разработчики движка не догадались сначала проверить что попадает в область, а потом проводить операции?
Что-то мне подсказывает, что для этого даже IQ Фореста Гампа бы хватило.
хватило конечно
но зная характер выводимых отрезков (например если направление ломаной гарантировано) можно отсечь гораздо эффективнее,
чем в общем виде решать эту задачу

alekcvp
makhaon
Это неверно. GDI рисует видюха, GDI+ - процессор.

Точно не наоборот?
точно, GDI+ как был на процессоре, так и остался
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39962988
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaon
swame2,Растеризация рисования линий что GDI что GDI+ происходит на процессоре, видеокарта ничем не поможет.

Это неверно. GDI рисует видюха, GDI+ - процессор.

Тут картина несколько более сложная, теоретически для того чтобы GDI ускорялось аппаратно,
нужна поддержка со стороны видеокарты и драйверов, как это делалось в "2D ускорителях" в 90 - х годах.
Производители современных массовых игровых видеокарт похоже забили на это ускорение,
выжимается 3D и работа с видеокодеками, 2D видимо считается что и так быстро отрисуется процессором.
Возможно, что более аккуратно ускорение реализуется профессиональными видеокартами типа Matrox,
но давно их не тестил. О дешевой видеокарте тут речи нет.
Последний раз тестил GDI на видеостене из 15 экранов, лет семь назад,
сравнивал много экранные контроллеры от Matrox и NVIDIA (поддержка более 4 экранов от NVidia только появилась),
там Matrox обгонял NVIDIA на порядок (но и стоил раза в 3 больше).

Если бы сейчас работало аппаратное ускорение на GDI, то оно рисовало бы с такой же скоростью, как Direct 2D,
а это не так - Direct 2D рисует гораздо быстрее, даже с антиагиасингом.

Вот тут эта кухня расписана в историческом разрезе

http://www.thg.ru/graphic/2d_acceleration_windows/2d_acceleration_windows-04.html
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]