Как ускорить прорисовку векторной графики ?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как ускорить прорисовку векторной графики ?

Сообщение Alex2013 » 17.10.2016 15:31:11

Мой "редактор форм и страниц" растет и ширится ... и вместе с ним растут объемы и сложность графики .
Вопрос: есть-ли простой "патентованный метод " ускорения отрисовки векторной графики ?

Теневой-буфер я уже "не шатко не валко" сделал" но скорость рисования сложно-составных изображений все равно далека от того, что показывают редакторы вроде Крорел Драва Адобе Илюстратора или Ксары . :(

Зы
Кода-то уже спрашивал что-то подобное но тему на форуме найти не смог....

Зы Зы
В дельфи была возможность собирать векторную графику в "мета-файлы" и рисовать всю сразу .
Можно ли что-то похожее делать в Лазарусе ?
:arrow: http://k504.khai.edu/index.php/blog/226 ... s-metafile

"По просьбе трудящихся"
Ссылка на ближайшую залитую в облако версию софтины где "тормоз зимует"
Дабы разговор был более предметным ..
Последний раз редактировалось Alex2013 21.10.2016 21:35:56, всего редактировалось 3 раз(а).
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Как ускорить прорисовку векторной графики ?

Сообщение zub » 17.10.2016 15:55:01

>>В дельфи была возможность собирать векторную графику в "мета-файлы" и рисовать всю сразу .
Делфи тут совершенно непричем. это виндовс, и в лазаре можно абсолютно также юзая винапи.
Но не думаю что это ускорит
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Как ускорить прорисовку векторной графики ?

Сообщение Лекс Айрин » 17.10.2016 20:35:57

Alex2013 писал(а):Теневой-буфер я уже "не шатко не валко" сделал" но скорость рисования сложно-составных изображений все равно далека от того, что показывают редакторы вроде Крорел Драва Адобе Илюстратора или Ксары . :(


Используйте openGL функции (и соответствующий контекст). Именно из-за рисования средствами видеокарты и возможна подобная скорость.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Как ускорить прорисовку векторной графики ?

Сообщение zub » 17.10.2016 21:53:50

Код: Выделить всё
Form1.FastVectorGraphix:=true;

Пробовал?))
ИМХО автора не спасет опенгл. для начала надо завязывать с
Alex2013 писал(а):А тому, что принцип " пишем как слышим " рулит !

Хочешь быстро? просто не будет.
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Как ускорить прорисовку векторной графики ?

Сообщение Sharfik » 18.10.2016 01:26:22

Лекс Айрин писал(а):Используйте openGL функции (и соответствующий контекст). Именно из-за рисования средствами видеокарты и возможна подобная скорость.

Где эти программы которые используют GPU? Вот сижу сейчас дома, пишу тут. А на работе комп i7 с Quadro картой делает видео ролик из анимации по модельки. По поим подсчетам 12 часов делать будет двухминутное видел. Самое обидное, что программа профессиональная, давно на рынке и немало стоит. Но :evil: график загрузки GPU выше 5% не поднимается когда она работает, зато CPU под завязку. Так же как и вся оперативка что есть.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 759
Зарегистрирован: 20.07.2013 01:04:30

Re: Как ускорить прорисовку векторной графики ?

Сообщение Alex2013 » 18.10.2016 04:23:36

У меня от использования мета файлов возможно эффект будет ... ( за счет уменьшения вызовов скриптового движка )...
(Можно и просто каждую фигуру рисовать на "спрайте" (отдельном битмапе) запоминать до изменения и "клеить коллаж" перед выводом на экран но памяти, это "турбирование графики" будет грызть немерено ... )

Насчет аппаратного ускорения это идея ! Надо побывать ... Только не OpenGL и 3D ускорение, а обычный DirectDraw (Direct2d )! :idea:

Form1.FastVectorGraphix:=true;

:?: Гм ... Спасибо, проверю !
Зы
Читал что для расчетов научись возможности GPU использовать ....
http://www.nvidia.ru/object/cuda-parall ... ng-ru.html
http://ntu-kpi.comp.hi-tech.narkive.com ... cuda-physx
Интересно, а можно ли написать драйвер для перекидывания части нагрузки с FPU на "скучающий" GPU (причем автоматом) ?
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Как ускорить прорисовку векторной графики ?

Сообщение Лекс Айрин » 18.10.2016 09:17:37

Sharfik писал(а):Где эти программы которые используют GPU? Вот сижу сейчас дома, пишу тут. А на работе комп i7 с Quadro картой делает видео ролик из анимации по модельки. По поим подсчетам 12 часов делать будет двухминутное видел.

ну да... к сожалению, истинно профессиональные программы работы с видео достать не так легко. Как правило, это полупроф. И да -- обсчет видео, как правило, идет обычным процом((

Alex2013 писал(а):Только не OpenGL и 3D ускорение, а обычный DirectDraw (Direct2d )! :idea:


то есть, кроссплатформенность не нужна?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Как ускорить прорисовку векторной графики ?

Сообщение DYUMON » 18.10.2016 11:17:10

http://www.thg.ru/graphic/2d_acceleration_windows/print.html
это почитай может поможет
Аватара пользователя
DYUMON
постоялец
 
Сообщения: 234
Зарегистрирован: 11.03.2009 13:32:54

Re: Как ускорить прорисовку векторной графики ?

Сообщение Alex2013 » 18.10.2016 14:10:04

DYUMON писал(а):http://www.thg.ru/graphic/2d_acceleration_windows/print.html
это почитай может поможет

Мутновато если честно ... Для практики толку чуть .

Лекс Айрин писал(а):то есть, кроссплатформенность не нужна?

Желательна но для среды разработки не критично.
Да и наверняка есть аналоги DirectDraw для других систем . (Иначе я не представляю как можно сделать даже быстрый скролинг для "длинных" веб-страниц в обычном браузере Ну не превращают же они страницу (вроде той-же статьи) в порезанный куски чудовищный не сжатый битмап, ага при даже при моем скромном по современным меркам разрешении 1920×1080 то бишь Full HD... это было бы "байто-раздирающие зрелище"! :wink:
Для проверки я еще и на второй монитор 1920+1024 окно расширил, плавность чуть теряется (а что ждать от дешевого двухрядного нота НP с 4 гигами подключенного сразу к двум мониторам ? ... но на удивление ничего критического ! )
Последний раз редактировалось Alex2013 18.10.2016 14:26:19, всего редактировалось 2 раз(а).
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Как ускорить прорисовку векторной графики ?

Сообщение zub » 18.10.2016 14:22:07

Alex2013
я тебе уже говорил:
1 - прокладка межу "скриптами" и фактическим рисованием - чтобы организовать отрисовку как надо, а не как "слышится"
2 - обрабатывать только те данные которые надо, а не всё подряд = не линейные алгоритмы и структуры данных

Ты бы хоть определился сколько и чего ты планируешь рисовать. сколько ресурсов ты тратишь на это сейчас и сколько хотелось бы. Иначе все разговоры DirectDrawы, Опенгли - это демагогия.

Лекс Айрин
>> истинно профессиональные программы работы с видео достать не так легко.
не распарсил слишком тонко это или слишком толсто
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Как ускорить прорисовку векторной графики ?

Сообщение Лекс Айрин » 18.10.2016 14:22:36

Alex2013 писал(а):Желательна но для среды разработки не критично.
Да и наверняка есть аналоги DirectDraw для других систем . (


есть.. openGl/Al. Поэтому и уточняю про кроссплатформенность.

Alex2013 писал(а): Ну не превращают же они страницу (вроде той-же статьи) в порезанный куски чудовищный не сжатый битмап, ага при разрешении 1920×1080 то бишь Full HD... это было бы "байто-раздирающие зрелище"! :wink: )


для этого есть такое понятие как шрифт -- набор быстро рисуемых, по особым правилам, векторных картинок для каждой буквы (символа). При прокрутке достаточно собрать видимую область текста -- кадр. Ну и добавить картинки. Ну а то, что текст рисуется на лету проверить легко если система немного подтормаживает -- достаточно пролистать текст за пределы буфера листа. Тогда будет показан белый (реже другого цвета) лист, до момента заполнения видимой области.

Добавлено спустя 2 минуты 32 секунды:
zub писал(а):не распарсил слишком тонко это или слишком толсто


Профессиональные программы видеорендеринга есть преимущественно у видеостудий. и цена их, боюсь, для обычного человека заоблачна. Так что скорее толсто.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Как ускорить прорисовку векторной графики ?

Сообщение Alex2013 » 18.10.2016 14:46:30

zub писал(а):Alex2013
я тебе уже говорил:
1 - прокладка межу "скриптами" и фактическим рисованием - чтобы организовать отрисовку как надо, а не как "слышится"
2 - обрабатывать только те данные которые надо, а не всё подряд = не линейные алгоритмы и структуры данных

Ты бы хоть определился сколько и чего ты планируешь рисовать. сколько ресурсов ты тратишь на это сейчас и сколько хотелось бы. Иначе все разговоры DirectDrawы, Опенгли - это демагогия.



1 Согласен ! Но я уже добрался до уровня развития программы когда это реально (в ближайшей перспективе ) понадобится ..
В ранних версиях нужно было просто нечто рабочее что-бы "концептуал" проверить... Не демка но ранние альфа-версии .
И изначально если помнишь графический редактор был вообще более чем вспомогательной утилитой + "полигоном обкатки идей" к будущей среде разработки программ . А сейчас это часть другого проекта и решает задачи, которые сильно отличаются от тех что у него были в проекте MidAsm.

(Можно сказать, что это вообще уже не ГР, а простой но довольно универсальный интерактивный помощник в создании визуальной части веб-приложений, где визуальные элементы важны (например позавчера добавил элемент помогающий строить простые таблицы ) но я не думаю на них останавливаться ... Хотя объемы и сложность графики явно растет. )

2 Тут сложнее но уже есть идеи . Хотя не откажусь от более развернутого совета ...
("не линейные алгоритмы и структуры данных" звучит разумеется гордо .... но применительно к практике как-то уж очень расплывчато .) :idea:
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Как ускорить прорисовку векторной графики ?

Сообщение zub » 18.10.2016 15:55:27

>>2 Тут сложнее но уже есть идеи .
Какие?
>>Хотя не откажусь от более развернутого совета ...
Я имею ввиду b-tree, r-tree и прочие структуры для хранения "пространственных" данных позволяющие осуществлять быстрый поиск нужной информации, без перебора всего подряд
В зкаде я юзаю b-tree и имею 3 уровня "прокладок"
1 - dxf примитивы
2 - геометрические примитивы
3 - графические примитивы

Перовый уровень - аналог твоих скриптов, для работы с этими примитивами программа и разрабатывается
Второй уровень - DXF примитив отрисовывает себя для движка элементарными геометрическими примитивами (линия, окружность, дуга и т.п.), На этом уровне движек осуществляет операции на вроде выбора мышкой, поиска пересечений, привязок
Третий уровень - данные графической системы для отрисовки - непосредственно представление примитивов в виде понятном графической системе OpenGL\GDI - тут по идее должны сидеть всякие OpenGL VA и GDI метафайлы.

на 1 и 2 уровне у меня используются бинарные деревья для хранения данных. 1,3 уровни у меня присутствуют довольно давно, 2 уровень начал вводить совсем недавно и он пока еще толком не работает.
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Как ускорить прорисовку векторной графики ?

Сообщение Alex2013 » 18.10.2016 16:32:05

zub писал(а):>>2 Тут сложнее но уже есть идеи .
Какие?

Для начала просто упрятать в метафйл результаты однократного исполнения скриптов ... а дальше проверять флаг изменения .
Если есть изменения в данных вызвать скрипт и изменить ТОЛЬКО ОДИН буферный метафайл для конкретного элемента .

Я имею ввиду b-tree, r-tree и прочие структуры для хранения "пространственных" данных позволяющие осуществлять быстрый поиск нужной информации, без перебора всего подряд


Поиск пока смысла не имеет разве, что водить вычисление видимости на экране . Но для по сути редактора форм (блоков визуальных и не очень вставок в "фоновую" веб-страницу ) это пока кажется избыточным . (Механизм "за горизонтального" скролинга есть, но он добавлен как бы "на всякий пожарный случай") Я пока не собираюсь делать полное редактирование веб-приложений в форме схем алгоритмов . (Хотя для другой программы пакета "Конечного Компоновщика Веб-Приложений" возможно что-то похожее будет уместно... )
Ну и 2Д у меня пока сугубый (Даже левелов нет и едва-ли будут )
Выбор элемента мышкой даже сейчас к явным задержкам не приводит, а уж с "мета-ускорением" и подавно тормозить не будет !

Короче, если искать аналог близкой по назначения программы, то ближайший будет в редакторе форм Лазаруса (в виде отдельного программного модуля) но только для визуализации процесса создания форм и прочих "условно-статических" элементов веб-приложений .
Последний раз редактировалось Alex2013 18.11.2016 15:06:03, всего редактировалось 3 раз(а).
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Как ускорить прорисовку векторной графики ?

Сообщение zub » 18.10.2016 16:46:53

>>Поиск пока смысла не имеет разве, что водить вычисление видимости на экране
Ну если ничего не имеет смысла, то что у тебя тормозит?
zub писал(а):Ты бы хоть определился сколько и чего ты планируешь рисовать. сколько ресурсов ты тратишь на это сейчас и сколько хотелось бы. Иначе все разговоры DirectDrawы, Опенгли - это демагогия.


Добавлено спустя 4 минуты 27 секунд:
>>то ближайший будет в редакторе форм Лазаруса
Если у тебя тормозит подобный объем отрисовки - дело явно не в "Как ускорить прорисовку векторной графики ?", подобные объемы рисуются без каких бы то ухищьрений еще со времен 286
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Majestic-12 [Bot] и гости: 26

Рейтинг@Mail.ru