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

Точно не наоборот?

100%. Я видел и довольно долго GDI который рисовался до акселерации видюхой самим процессором. Это был ужас. 2D аксели появились не сразу. Так что просто отлично знаю о чем говорю. Ну а то, что GDI+ рисуется процем - довольно известно. Можно к слову по загрузке посмотреть.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39963008
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)

но зная характер выводимых отрезков (например если направление ломаной гарантировано) можно отсечь гораздо эффективнее, чем в общем виде решать эту задачу
Можно сказать, что 5 копеек гораздо больше чем 1 копейка, и это будет чистой правдой.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39963040
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaon
alekcvp
пропущено...

Точно не наоборот?

100%. Я видел и довольно долго GDI который рисовался до акселерации видюхой самим процессором. Это был ужас. 2D аксели появились не сразу. Так что просто отлично знаю о чем говорю. Ну а то, что GDI+ рисуется процем - довольно известно. Можно к слову по загрузке посмотреть.


Современная картина сильно отличается о того ,что было в 90-е, например аппаратное ускорение GDI
в Windows Vista было полностью выпилено, потом в Windows 7 вернули обратно, но совсем в другом виде,
не факт что производителям игровых карт было интересно оптимизировать все эти изменения в драйверах.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39963064
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2,

есть много ньюансов:
использовал буфер - ускорение исчезло, а где его щас не используют?
так же и с GDI+, само оно вроде не использует, но DIB-секция которая в ней используется фактически использует видиокарту где только возможно

вот при печати, например, GDI уделывает GDI+ как тузик грелку, особенно на сетевые принтеры

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

но зная характер выводимых отрезков (например если направление ломаной гарантировано) можно отсечь гораздо эффективнее, чем в общем виде решать эту задачу
Можно сказать, что 5 копеек гораздо больше чем 1 копейка, и это будет чистой правдой.
ну если ты линию из 5 точек рисуешь, конечно фигня
у меня вот выводилось гораздо больше, и было совсем не фигня
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39963072
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)
swame2,

есть много ньюансов:
использовал буфер - ускорение исчезло, а где его щас не используют?
так же и с GDI+, само оно вроде не использует, но DIB-секция которая в ней используется фактически использует видиокарту где только возможно


Да и GDI не использует в современных ОС, вот цитата из статьи что я приводил (про Windows 7, применимо и к более поздним).

По сравнению с Windows XP, только подмножество команд GDI поддерживается GPU - а именно ClearType, ColorFill, BitBlt, AlphaBlend, TransparentBlt и StretchBlt. Если вы не знакомы с этими командами, то они выполняют следующее: прямой вывод текста, заполнение поверхности простыми цветами, копирование содержимого окна и прозрачное наложение. Хотя рендеринг сложных геометрических фигур не поддерживается вообще, копии содержимого окна и заполняемые области могут легко передаваться из апертурной памяти напрямую в память видеокарты.


Мы при выводе в Direct2D выигрывали, создавая буфер в памяти видекарты.

вот при печати, например, GDI уделывает GDI+ как тузик грелку, особенно на сетевые принтеры

PS: в любом случае выходит, что скорость вывода GDI, практически стабильна

Я собственно то же самое говорил, что видеокарта тут ничего не даст.

Единтвенный способ ускорения для линий который я знаю - заменять рисование с LineTo на PatBtl для горизонтальных / вертикальных
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39963077
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
Соколинский Борис
пропущено...
Можно сказать, что 5 копеек гораздо больше чем 1 копейка, и это будет чистой правдой.
ну если ты линию из 5 точек рисуешь, конечно фигня
Побольше.
В типичном случае отрисовка ~100 векторных объектов (регионы, прямоугольники, линии, точки) занимает порядка 5 мс. без оптимизации. Явно не те деньги, которые стоит экономить.
...
Рейтинг: 0 / 0
ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
    #39963914
Beltar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОзадачился ускорением вывода серии (многие тысячи) отрезков прямых на канву. У всех одинаковые параметры пера. Вот как чувствовал, что найду такую функцию.

Делал свой компонент для отрисовки графика таким методом еще в 2009-ом (готовые меня не устраивали). Потом развивал, использую и сейчас. У меня там задача - графики технологических параметров с оборудования за интервалы времени порядка суток, при частотах опроса до 1 раза в секунду. Иногда более миллиона точек в нескольких трендах. Я что-то смотрел тогда в сторону рисования ломаной, и даже GDI+ пробовал, в итоге все это оказалось тормознутым.

Да, у меня там есть оптимизации, основанные на том, что график всегда рисуется слева-направо, позволяющие критически сокращать число вызовов LineTo с миллионов до нескольких десятков тысяч, но в общем и целом для современных процессоров это тьфу. У меня тестовое приложение, рисующее 10 графиков с 1 728 100 точками укладывается в 250 мс при 148 тыс. вызовах LineTo. Если вызовов всего несколько тысяч, и нет вопроса рисования в реальном времени, то можно просто забить, если вопрос скорости есть, то почему бы не посмотреть в сторону Direct 2d (сам не юзал, т. к. целевые машины в т. ч. с XP были) или игровых движков.
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ускорение MoveTo..LineTo..MoveTo..LineTo.. с помощью PolyDraw()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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