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

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

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

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

Сообщение olegy123 » 09.11.2016 02:18:43

Насколько я понимаю делаешь типа IntraWeb? Там была реализована концепция VCL -> Web с сервером. В свое время прикольная штука была для Делфистов, не заморачиватся с изучением вэб технологиями.. Но это не будет выглядит современно. Так для себя.

С моей точки зрения WYSIWYG редакторы в WEB не нужны только по одной причине: там сами создатели стандартов плохо понимают что в итоге у них должно получится. Клепают то что сейчас модно и за что денег дают.. Над этим работают разные коллективы, которые друг друга ненавидят.. Вот так рождаются стандарты css, html5, js и другие..
WYSIWYG редакторы писались когда весь стандарт умещался на странице А4 и они долго не пересматривались. А сейчас хорошо живут скриптологи, им WYSIWYG не нужны.. им достаточно иметь хромовский отладчик-профайл.

По поводу всяких визуальных компонент и технологии отрисовок: очень большой опыт, знание и стилистику написания кода дало изучение сторонних компонент... Devexpress как пример.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

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

Сообщение Alex2013 » 10.11.2016 04:08:13

Именно как проект "для себя" и задуман пакет Веб-2 ...
(+есть мысль более плотно разобраться с веб-программированием на практике )

Но пока в нем нет довольно важной части, а именно "компоновщика готовых Веб-приложений под ключь" .
А вот когда он появится, назначение пакета может сильно расширится .

Классические "WYSIWYG редакторы в WEB" не очень популярны "по одной простой причине" их функциональность невозможно улучшить и изменить самостоятельно (не влезая в исходный текст программ ).

В моем "редакторе форм и страниц" при всем его прямо скажем убогом и пока глючном сервисе есть одно свойство отличающее его множества значительно более профессиональных редакторов .

Набор элементов в нем можно реально менять под свои нужды штатными средствам и без наличия исходных текстов редактора .

Вон не далее как сегодня (в прочем уже вчера... :wink: ) добавил в набор радела "формы" элемент CheckBox и при этом даже ни разу не загрузил Лазарус .
И пусть себе и дальше даже " сами создатели стандартов плохо понимают, что в итоге у них должно получится" я почти всегда смогу использовать почти любой новый стандарт по своему усмотрению .

У меня ведь за генерацию кода отвечают даже не шаблоны, а полноценные скрипты не нуждающиеся в дополнительном компиляторе (причем на паскале )
Ps
На каждый элемент пока по 5 отдельных скриптов + иконка :
Один строит команду во внутреннем формате по кликам мыши и прочим параметрам .
Второй рисует элемент в поле редактора .
Еще два конвертируют данные из команды в таблицу инспектора элементов и обратно.
И наконец, пока что последний скрипт строит HTML-код
( или кстати любой другой ... при желании хоть листинг на ассемблере )...
То есть гибкость максимальная .

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

Плюс ко всему этому "жестко управляемому хаосу" у каждого скрипта в "очереди скриптов" есть возможность обмениваться произвольными данными с "соседями по очереди" . ( иначе как бы я сделал те же Формы с их локальными координатами ?) :idea:

Ну и "на сладкое" есть пусть и примитивная но достаточно функциональная среда разработки и даже отладки скриптов .

Добавлено спустя 59 минут 42 секунды:
zub писал(а):
Alex2013 писал(а):Помню как на Векторе в машинных кодах(!) пытался сам свою оболочку написать ... даже выходило что-то но мороки было море ! Но суть в том что "топор тормоза" очень часто находится на несколько десятков этажей системной иерархии "выше" ... при еще стольких-же "этажах" до уровня прикладной программы. И иногда можно заставить систему "пользоваться лифтом" или вообще нагло проигнорировать ее навязчивый сервис .

Топор тормоза у тебя в руках. Ты можешь сказать что конкретно тормозит? Повторяю, объем отрисовки который есть у тебя - рисовался не напрягаясь 20 лет назад.
У тебя какаято каша в голове - передать в опенгл битмап, тогда заработает дма... Жесть((
Сделай отладочные замеры времени у себя, сделай экспортимпорт любого общепринятого формата - чтоб глядеть как подобный объем отрисовки ведет себя в нормальных программах и чтоб иметь возможность загрузить к себе чтонить побольше для тестов.
Тогда появится конкретика, а не флейм с фантазиями

Разговор ушел в теорию ... Конкретика была в других постах.

Добавлено спустя 9 минут 33 секунды:
serbod писал(а):Время на то и дается, чтобы его тратить, а не копить. Пусть попробует разные способы. Есть же еще framebuffer, DirectDraw, GDI+.

Способы конечно надо пробовать, но откровенный бред лучше сразу отсеять, на то и общение на форуме


А говорил что "я не гуру"" ... :mrgreen:

Вообще-то я надеялся на несколько очень простых подсказок ... Часть ответов я получил и уж использовал на практике часть то ли оказалась "вне компетенции данного комьюнити " то ли я не смог верно сформулировать вопросы.
И так по теме ...
Из оставшегося на повестке "доброго времени суток" 8) первое что интересует меня методы быстрого копирования с битмапа на битмап (при большом разрешении )
Второе есть ли быстрый способ определения границ произвольной фигуры (Один у меня есть и весьма надежный но крайне медленный .)
И третье неплохо бы ткнуть меня любопытным носом в некие не слишком сложные исходники векторного редактора или на пример ГИС где есть чему поучиться особенно по сбжевой теме .... :idea:
Последний раз редактировалось Alex2013 17.01.2017 18:51:45, всего редактировалось 3 раз(а).
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение zub » 10.11.2016 09:55:31

Критику по общей части поста я опущу))

>> методы быстрого копирования с битмапа на битмап
Что ты имеешь ввиду под битмапом? TBitmap из лазаря?
Copyrect или как там оно называется. Чуток выиграешь лазя напрямую в rawdata (но это неоправданый геморой). лазарьный TBitmap не оченьто применим для твоих задачь

>>Второе есть ли быстрый способ определения границ произвольной фигуры (Один у меня есть и весьма надежный но крайне медленный .)
Когда говоришь а (Один у меня есть и весьма надежный но крайне медленный) надо говорить и б - заключается в томтотомто...
Я знаю только один - найти минимальные и максимальные координаты из точек определяющих фигуру. Т.е. получить AABB (axis aligned bounding box) для фигуры

Добавлено спустя 7 минут 2 секунды:
И третье неплохо бы ткнуть меня любопытным носом в некие не слишком сложные исходники векторного редактора или на пример ГИС где есть чему поучиться особенно по сбжевой теме .... :idea:

Эти ссылки мелькали походу обсуждения. ты надеешся на чудо - появление рояля в кустах?
свое болото
https://sourceforge.net/projects/zcad/ + viewtopic.php?f=10&t=5917

чужое
viewtopic.php?f=32&t=9607&p=78921#p78921

пример fpvectorial, смотрелка, не редактор
https://sourceforge.net/p/lazarus-ccr/s ... fpvviewer/

еще
http://forum.lazarus.freepascal.org/ind ... 884.0.html
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение alexey38 » 10.11.2016 13:16:38

Как я еще на 3 странице писал, что схема когда вначале рисуются элементы в маленькие в TMetafile, затем все элементы из видимой области в большой TMetafile, который отображается в TBitMap, который далее отображается в TCanvas формы работала очень быстро еще на Pentium II/III. На современных компах - это работает еще быстрее, т.е. без тормозов, если это не показ фильма 50 кадров в секунду. Соответственно оптимизировать то, что работает очень быстро - это лишняя суета.

Тормозить может только векторная прорисовка элементов в TMetafile и из TMetafile в общий TMetafile, который далее в TBitMap. Если миллионы векторных элементов, то будет работать медленно, а если тысячи, то весьма быстро. Соответственно если что и оптимизировать, то вывод векторной графики при очень большом числе элементов.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

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

Сообщение Alex2013 » 10.11.2016 18:17:40

alexey38 писал(а):Как я еще на 3 странице писал, что схема когда вначале рисуются элементы в маленькие в TMetafile, затем все элементы из видимой области в большой TMetafile, который отображается в TBitMap, который далее отображается в TCanvas формы работала очень быстро еще на Pentium II/III. На современных компах - это работает еще быстрее, т.е. без тормозов, если это не показ фильма 50 кадров в секунду. Соответственно оптимизировать то, что работает очень быстро - это лишняя суета.

Тормозить может только векторная прорисовка элементов в TMetafile и из TMetafile в общий TMetafile, который далее в TBitMap. Если миллионы векторных элементов, то будет работать медленно, а если тысячи, то весьма быстро. Соответственно если что и оптимизировать, то вывод векторной графики при очень большом числе элементов.


Просто TMetafile (+ Еще и скрипты) неизбежное зло с которым более мене понятно что делать (или не делать если все более или менее но утраивает )... Вот явно непропорциональные тормоза при увеличении разрешения рабочего поля напрягают.
(Тем боле что ничего похожего во многих программах нет )

прорисовка элементов в TMetafile и из TMetafile в общий TMetafile, А это зачем ? :roll: У меня цикл сразу выводит отдельные "Metafile" на теневой битмап который потом копируется на канвас ПаинтБокса ... Хотя если подумать возможно будет реально быстрее ( за счет того, что Metafile может не иметь заранее заданных границ и не передает лишних "пустых "данных) . Но мне показалась, что если я буду рисовать метофайлы на прямую то будет видно как и куда "процесс пошел " что не есть хорошо .

Но думаю попробовать стоит ... (так что за совет спасибо !) :idea:

zub писал(а):Критику по общей части поста я опущу))

Извиняюсь за опечатки и вообще ("ночь... фонарь..." и все такое ... :wink: )

>> методы быстрого копирования с битмапа на битмап
Что ты имеешь ввиду под битмапом? TBitmap из лазаря?
Copyrect или как там оно называется. Чуток выиграешь лазя напрямую в rawdata (но это неоправданый геморой). лазарьный TBitmap не оченьто применим для твоих задачь

Кроме Copyrect есть много чего ну хотя бы классический BitBlt ...
+Когда-то читал, что в некоторых случаях помогает копирование по частям ...
>>Второе есть ли быстрый способ определения границ произвольной фигуры (Один у меня есть и весьма надежный но крайне медленный .)
Когда говоришь а (Один у меня есть и весьма надежный но крайне медленный) надо говорить и б - заключается в томтотомто...
Я знаю только один - найти минимальные и максимальные координаты из точек определяющих фигуру. Т.е. получить AABB (axis aligned bounding box) для фигуры

Вот function ScanOBJ...
(Это скрипт из "Лаборатории распознавания образов " но думаю все понятно )
Суть в рекурсивном обходе всей фигуры по точкам и "стирании" ее за собой.
Недостатки :
1 Медленно (потому что обход хоть и умный но по точкам )
2 Разрушает за собой картинку, а это значит, что нужно рисовать фигуру отдельно ...
(Не очень критично для одиночной операции, но все-же не слишком хорошо для всей очереди )

Код: Выделить всё
Type
Tr=Record
    Left, Top,Right,Bottom :Integer;
   end;
DD = record dx, dy: integer; end;
Tdelta = array[1 .. 8] of DD;
Const
clBlack   = $000000;
clWhite   = $FFFFFF;       
Var
delta:Tdelta;
H,W: integer;
RR:Pointer;
function ScanOBJ(x,y:integer):tr;
var
tempr:Tr;
i,X1,Y1,XC,YC: integer;
begin
Result. Left := x; Result.Top := y;
Result. Right := x; Result.Bottom := y;
SetPixel(1,x,y,255);
for i := 1 to 8 do
begin
  XC:=x+delta[i].dx;YC:=y+delta[i].dy;
  if xc>-1  then
     if xc<w then
        if yc>-1 then
         if  yc<h then begin
  if GetPixel(1,xc,yc) = clBlack then
   begin
    X1:=x+delta[i].dx; Y1:=y+delta[i].dy;
    tempr := ScanOBJ(X1,Y1);
    if tempr.Left <= result.left then result.Left := tempr.Left;
    if tempr.right >= result.right then result.right := tempr.right;
    if tempr.top <= result.top then result.top := tempr.top;
    if tempr.bottom >= result.bottom then result.bottom := tempr.bottom;
   end;
  end;
end;
end;
Var
t,RC,x,y:Longint;
R:Tr;
C,i: integer;
begin
delta[1].dx:=0;  delta[1].dy:=1;
delta[2].dx:=1;  delta[2].dy:=0;
delta[3].dx:=0;  delta[3].dy:=-1;
delta[4].dx:=-1; delta[4].dy:=0;
delta[5].dx:=1;  delta[5].dy:=1;
delta[6].dx:=1;  delta[6].dy:=-1;
delta[7].dx:=-1; delta[7].dy:=1;
delta[8].dx:=-1; delta[8].dy:=-1;

W:=GetWidth(1);
H:=GetHeight(1);

RC:=0;
SetParam('RC','0');
CopyImage(1,2);

Repeat
T:=0;
// Поиск первой точки
For X:=0 to W-1 do
   For Y:=0 to H-1 do
   begin
    C:= GetPixel(1,x,y);
    if C=clBlack  then begin
    // Запуск рекурсивного поиска границ
    R:=ScanOBJ(x,y );
//Запись границ найденной фигуры
    SetParam('R_'+IntToStr(RC),IntToStr(R.Left)+','+IntToStr(R.Top)+','+IntToStr(R.right)+','+IntToStr(R.bottom));
  Inc(RC); //счетчик
     T:=1;X:=W-1;Y:=h-1;
   end;
end;
 
SetParam('RC',IntToStr(RC));
  If Rc<5 then RunTime (5,RC ) else
  If Rc<10 then RunTime (10,RC ) else
  If Rc<20 then RunTime (20,RC )else
  If Rc<100 then RunTime (100,RC );

Until T=0;
//msg('Ok');
SResult('Stage 3 '+#13+#10+IntToStr(RC)+#13+#10+'Ok');
CopyImage(2,1);
end.

Добавлено спустя 7 минут 2 секунды:
И третье неплохо бы ткнуть меня любопытным носом в некие не слишком сложные исходники векторного редактора или на пример ГИС где есть чему поучиться особенно по сбжевой теме .... :idea:

Эти ссылки мелькали походу обсуждения. ты надеешся на чудо - появление рояля в кустах?
свое болото
https://sourceforge.net/projects/zcad/ + viewtopic.php?f=10&t=5917

чужое
viewtopic.php?f=32&t=9607&p=78921#p78921

пример fpvectorial, смотрелка, не редактор
https://sourceforge.net/p/lazarus-ccr/s ... fpvviewer/

еще
http://forum.lazarus.freepascal.org/ind ... 884.0.html


За ссылки спасибо ! Посмотрю ...
А я вот что нашел (но первое чуть сложновато, а втрое явно слишком примитивно ):
http://www.flex-graphics.com/ru/
http://delphisources.at.ua/load/iskhodn ... 7-1-0-359#
Зы
Про "твое болото" могу сказать , что проект впечатлят .(хорошо бы мой достиг похожего уровня через пару тройку лет... хотя похоже, что для меня это утопия ... ).. Но это CAD а это значит слишком специфические вводные и акценты .
Это даже не ГИС где все куда проще. Так что "рояля в кустах" для меня там, увы, скорее всего не найдется .
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение zub » 10.11.2016 20:02:08

>>Кроме Copyrect есть много чего ну хотя бы классический BitBlt ...
Берешь свой "что у тебя там", глядишь в его паблик секции методы по звучанию похожие на копирование и пробуешь их попутно замеряя время затраченое на копирование.
Затем или отказываешся от копирования, или меняешь "что у тебя там" на чтото более подходящее.

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

>> Так что "рояля в кустах" для меня там, увы, скорее всего не найдется .
Про рояль в кустах - я имел ввиду не свои поделки, а то что все эти ссылки тебе приводились в чреде твоих топиков, ты их уже должен был видеть
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Alex2013 » 10.11.2016 21:02:01

Ух какой софизм вкусный .. :mrgreen: ням... ням ... дайте два ! :lol:

Упоминаешь теорию говорят "дайте конкретики" ... Как доходит до конкретики говорят "что у тебя там" (вот у меня тут viewtopic.php?p=102268#p102268 ) Пока ничего особенно не менял (так по мелочи поправил )...
Про OLG написал, что думаю стоит попробовать (причем заметь МНЕ попробовать - т.е. никто никого "припахать" не собирается ) Просто повторяю в программировании вообще, есть довольно много не очевидного и почти всегда есть разные способы сделать одно и тоже (причем одни способы бывают эффективнее других). Вот я и спрашиваю: не знает ли кто "более других" способов ... Конкретно . :idea:
zub писал(а):>>Суть в рекурсивном обходе всей фигуры по точкам и "стирании" ее за собой.
Я надеюсь ты шутишь так. Суть должна быть в том что между скриптом и канвасом всунуть свою прокладку (или много прокладок) которая прозрачно выдаст габариты объекта, запишет его в метафайл или в какото другой кэш.

Как я получу эти габариты если я не могу знать их заранее ? Да, в моем редакторе чаще применяются не растровые , а векторные фигуры, но от этого не легче ...
Я просто не доложен исходить из предположения , что я заранее знаю форму фигуры .
(Что если это будет нечто вроде "тени динозавра" нарисованной вокруг "скелета-полилинии " ? Уже сейчас есть "демо-куб" и там из входящих координат только одна точка есть и как его нарисует скрипт около нее "вопрос конечно интересный..." и это еще далеко не "финал фантазий " это может быть нечто вроде дерева рисуемого по методам фрактальной графики или картинка типа прозрачного спрайта или график произвольной функции без рамки (ага что-то вроде "бутылки Клейна" или тессеракта ) или просто надпись написанная по кругу... )
Последний раз редактировалось Alex2013 10.11.2016 21:20:21, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение Linus » 10.11.2016 21:12:39

Alex2013 Ответ нет и не надо разводить очередную демагогию


Хорошо. Нет так нет. Тогда вопрос такой.
У нас есть массив содержащий грубо говоря битовую матрицу (сформирован заголовок + инф заголовок. Итого 26 байт и далее матрица пикселей)
Как это нарисовать?
Linus
новенький
 
Сообщения: 47
Зарегистрирован: 11.01.2013 22:01:28

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

Сообщение zub » 10.11.2016 21:18:17

>>Как я получу эти габариты если я не могу знать их заранее ?
у тебя есть скрипт
Код: Выделить всё
line(1,1,100,100);
circle(50,50,150);

между скриптом и канвасом сидит прокладка, реализующая line и circle (и еще много чего, что тебе понадобится) она тупо перенапрявляет эти вызовы на канвас и ищет минимальные и максимальные координаты. в данном случае она найдет габарит (-100-p,-100-p)(200+p,200+p), где p - толщина пера которым рисуется этот "скрипт".
я бы сделал минимум 2 таких прокладки.
1 - определяет габарит,
2 - пишет "скрипт" в метафайл (или просто запоминает что в какой последовательности рисуется)
Всё, дальше скрипт уже ненужен - на основе данных полученых 1 решаем выводить 2 на канвас или нет. Т.е. перерисовки выполняются без использования скрипта. скрипт будет выполнен только при редактировании фигуры.
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Alex2013 » 10.11.2016 21:40:53

zub писал(а):>>Как я получу эти габариты если я не могу знать их заранее ?
у тебя есть скрипт
Код: Выделить всё
line(1,1,100,100);
circle(50,50,150);

между скриптом и канвасом сидит прокладка, реализующая line и circle (и еще много чего, что тебе понадобится) она тупо перенапрявляет эти вызовы на канвас и ищет минимальные и максимальные координаты. в данном случае она найдет габарит (-100-p,-100-p)(200+p,200+p), где p - толщина пера которым рисуется этот "скрипт".
я бы сделал минимум 2 таких прокладки.
1 - определяет габарит,
2 - пишет "скрипт" в метафайл (или просто запоминает что в какой последовательности рисуется)
Всё, дальше скрипт уже ненужен - на основе данных полученых 1 решаем выводить 2 на канвас или нет. Т.е. перерисовки выполняются без использования скрипта. скрипт будет выполнен только при редактировании фигуры.

Я тоже так думал но есть одно "но "... часть фигур может не совпадать ни с одной из координат пример градиент то черного до белого с белым фоном . если его растянуть то часть окажется прозрачной (Да можно прозрачность выключать и считать что это просто прямоугольник но как быть прозрачными картинками ?(векторными или растровыми не суть важно, важно что это натуральный "черный ящик в горошек " ) )
Видимо придется просто делать исключения ..
Правда есть одна надежда, и она в том, что метофайлы по идее могут сами отслеживать размер фигуры, если он не задан заранее ...
(как autosize в битмап )
Последний раз редактировалось Alex2013 10.11.2016 21:44:51, всего редактировалось 3 раз(а).
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение olegy123 » 10.11.2016 21:41:51

В OpenGL нет виндовского GUI, так что всякие чекбоксы, лейблы, кепшены эдиты и прочее, придется изобретать заново. Либо искать библиотеку и вкручивать в свой проект.
В GLScene есть такие компоненты, но учти - что всего там нет.

Я даже уверен, что таких возможностей даже нет у разработчиков всяких продуктов: хром, опера, макОсь. Там они используют обычный битмап, на нем рисуют контролы обычными функциями 2D(GUI), потом загоняют в текстуру и её выводят.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

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

Сообщение zub » 10.11.2016 21:49:59

>>если его растянуть то часть окажется прозрачной
И какая в этом проблема?
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение olegy123 » 10.11.2016 21:50:16

Зачем вам писать в метофайл? чтобы изменить фигуру? Зачем скрипт?

Добавлено спустя 9 минут 13 секунд:
zub писал(а):>>Суть в рекурсивном обходе всей фигуры по точкам и "стирании" ее за собой.
Я надеюсь ты шутишь так. Суть должна быть в том что между скриптом и канвасом всунуть свою прокладку (или много прокладок) которая прозрачно выдаст габариты объекта, запишет его в метафайл или в какото другой кэш.

Почему не использовать InvalidateRect, InvalidateRgn?
Есть фигура, у ней есть свой регион(TRect). Можно поступить так.. Вычислять кто попадает в данный регион "фигуры", их перерисовывать на канве согласно Z и Вызывать InvalidateRect - обновить только указанный участок. - это если вы художествуете на канве..

если у вас еще есть на контроле прилепленные контролы (TWinControl) - то желательно посылать им Invalidate
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

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

Сообщение zub » 10.11.2016 22:25:48

>> это если вы художествуете на канве..
нет, я не художествую.

>> Почему не использовать InvalidateRect, InvalidateRgn?
Потому что меняются не ректы, а примитивы. И рисуются также не ректы а примитивы. Если примитивы не менялись и перерисовка не требуется, то конечно нужно восстанавливать только испорченную область из заранее сохраненного буфера.

>> Вычислять кто попадает в данный регион "фигуры",
Пока речь только о том чтоб ТС научился эти ректы в вычислять, запоминать и на основе их задумался о возможных путях ускорения
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение zub » 11.11.2016 00:03:30

>>Зачем заниматься еще дубляжем и обновлением канвы?
Ну какбы мы на ней рисуем, и обновить она не из какого буфера не может - потому что она незнает что мы на ней нарисуем. Наверно в этом и есть отличие художеств и векторной графики))
Также запоминать нужно не котечное состояние конвы которое есть перед переключением видимого-невидимого буфера а некоторое промежуточное и после восстановления еще дорисовать некоторую информацию.
Последний раз редактировалось zub 11.11.2016 00:43:16, всего редактировалось 1 раз.
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Пред.След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google [Bot] и гости: 58

Рейтинг@Mail.ru