Как увеличить скорость отрисовки на canvas?

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

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

Ответить
xterro
постоялец
Сообщения: 148
Зарегистрирован: 23.02.2014 13:49:33

Сообщение xterro »

Vadim
Ага, только фишка в том, что резервную копию он делает в той-же директории, откуда загружался проект. а что делать если права на директорию, только на просмотр, и проект загружался только "на посмотреть"(вот как у меня). Директория "/usr/lib/*" обычно только на просмотр, прав на запись туда обычно не требуется. Думаю, может логичней настроить авто-сохранение, скажем каждую минуту-две-пять..., Или может есть способ настроить как-то путь, по которому сохранять резервные копии(скажем в хомяке пользователя), надо будет глянуть настройки на эту тему :)
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

xterro
Я себе Lazarus ствлю в home-каталог, так что проблем с правами никогда не бывает. И Вам советую, не надо будет делать лишних телодвижений. ;-)
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

xterro писал(а):Vadim
Ага, только фишка в том, что резервную копию он делает в той-же директории, откуда загружался проект. а что делать если права на директорию, только на просмотр, и проект загружался только "на посмотреть"(вот как у меня). Директория "/usr/lib/*" обычно только на просмотр, прав на запись туда обычно не требуется. Думаю, может логичней настроить авто-сохранение, скажем каждую минуту-две-пять..., Или может есть способ настроить как-то путь, по которому сохранять резервные копии(скажем в хомяке пользователя), надо будет глянуть настройки на эту тему :)

Насколько я помню линукс, прежде чем устанавливать Lazarus туда, надо было хотя бы ознакомится с назначением каталогов в linux.
ReadMe
/usr/lib/ - разделяемые библиотеки различных приложений , для папок программ предусмотрены другие папки.
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

Только что проверил (на MSE*) насколько GraphicsMagick (С-я DLL-ка) рисует быстрее чем нативный FPImage - навскидку в 4..5 раз.
xterro
постоялец
Сообщения: 148
Зарегистрирован: 23.02.2014 13:49:33

Сообщение xterro »

Sharfik
Это да, но похоже в моём дистрибутиве(ALT Linux 6) по умолчанию, пакет с Lazarus ставится именно туда :( У меня в /usr/lib/lazarus лежит сам лазарь со всеми директориями, перимерами и документацией и ещё в моей папке пользователя в скрытой директории .lazarus/bin тоже лежит исполняемый файл лазаря, размером в 160 метров :shock: Сейчас назначил права на запись на директорию /usr/lib/lazarus/examples всё заработало, сообщений больше нет, но почему-то при запуске лазаря, в заголовке постоянно висит путь до этого примера (/usr/lib/lazarus/examples/openglcontrol), т.е он его не "отпустил" и считает этот проект текущим что-ли?
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

xterro, всегда можно скачать свою копию дистрибутива (в исходниках) и поставить ее в домашнюю папку.
xterro
постоялец
Сообщения: 148
Зарегистрирован: 23.02.2014 13:49:33

Сообщение xterro »

Это да. У меня теперь другая проблема, пробую рисовать, используя OpenGL, создал форму, кинул на неё ScrollBox, на него кинул OpenGLControl. Срызу задач Range для скролбаров(хотел посмотреть, как будет работать прокрутка), нарисовал треугольник. Но когда двигаю ползунками скроллбара, на самом изображении вы лазят какие-то артефакты, как будто на изображении просвечивают какие-то окна, или скроллбары... что-то такое...(в момент когда я двигаю ползунком). Что это может быть, косяк компоненты, среды, дров, или я просто что-то не до инициализировал? Причём артефакты наблюдались и когда просто запустил приложение, но ещё ничего не выводил, эффект был, будто он не перетирается(знаете, когда окном шевелишь, и оно остаётся не прорисованым, когда рисонок как бы следует за движением мышки ) Вот немножко кода:

Код: Выделить всё

procedure TForm1.OnMainFormCreate(Sender : TObject);
var
  w, h : Integer;
begin
    { Init OpenGL }
    w := 1000;
    h := 1000;
    glClearColor( 0.0, 0.0, 0.0, 0.0 );
    glViewport( 0, 0, w, h );
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();

    ScrollBox.VertScrollBar.Range := h;
    ScrollBox.HorzScrollBar.Range := w;

end;       

{ Событие OnPaint OpenGLControl }

procedure TForm1.OpenGLControlPaint(Sender : TObject);
begin
    glClear(GL_COLOR_BUFFER_BIT );
    glColor3f( 1.0, 0.0, 0.0 );
    glBegin(GL_TRIANGLES);
        glVertex3f(0.0, 1.0, 0.0);
        glVertex3f(-1.0, -1.0, 0.0);
        glVertex3f(1.0, -1.0, 0.0);
    glEnd();
    OpenGLControl.SwapBuffers;
end;                                                       
                                               
У вас нет необходимых прав для просмотра вложений в этом сообщении.
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Так не надо делать, даже нельзя - способ прокатит для обычных контролов, не для OpenGL. По факту ты сделал контекст 1000x1000 и глядиш на него через "окошко" формы. A нужно контекст делать в размер формы и ползунки привязывать к настройке матриц вида\прецирования эмулируя скролинг перерисовкой, т.е. двигать камеру
xterro
постоялец
Сообщения: 148
Зарегистрирован: 23.02.2014 13:49:33

Сообщение xterro »

Вот оно чё, всё оказалось сложнее чем я думал. Т.е нужно использовать отдельные TScrollBar и вручную обрабатывать их события(в обработчиках этих событий двигать камеру)?. Пойду искать примеры, спасибо )
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Всё не так сложно как кажется)) ты главное разберись с настройкой матриц, т.е. сделай их зависимыми от зума и положения камеры, а вот привязать это дело к колесу мышки и полосам или чему еще сложности никакой нет.
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

Если дело дошло до низко-уровневой отрисовки, то есть лучшая (становящаяся стандартом де-факто) альтернатива чем OpenGL : OpenCL+OpenCV. Или если нужна только графика, то вместо OpenCV (весьма громоздкого набора библиотек) можно использовать OpenCLIPP.
Тут хардварная акселерация по полной. Лучше сразу переучиться на эту связку - она и стандартная, и поддерживается монстрами индустрии.
MiniQ
новенький
Сообщения: 81
Зарегистрирован: 28.01.2013 16:31:55

Сообщение MiniQ »

Весьма любопытно, а есть ли реализация LCL через OpenCL+OpenCV?
Столкнулся с тем, что мой проект, запущенный на RaspberryPi неприлично медлено отрисовывает элементы интерфейса.
Сейчас весь в поисках, неужто прийдется переползать на Qt5 и Qt Creator...
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

Есть проект Delphi-OpenCV - правда под новые (XE) "дельфины". OpenCL -часть драйверов любой современной видяхи.
RaspberryPi - что за зверь ? На каком проце, видяхе ,.. ?

Добавлено спустя 5 минут 16 секунд:
неприлично медлено отрисовывает элементы интерфейса.

FPImage (применяемый в LCL) вообще очень медленный - на отрисовке интерфейса проигрывает тому же GraphicsMagick раз эдак в 10.
xterro
постоялец
Сообщения: 148
Зарегистрирован: 23.02.2014 13:49:33

Сообщение xterro »

Это такой маленький одноплатный компьютер. RaspberryPi уже не в моде, сейчас в моде Cubieboard, они уже двухядерные идут с гигом оперативы :)
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

Это такой маленький одноплатный компьютер.

Надо смотреть что является узким местом, создающим медленную отрисовку. Загружен ли проц под 100% при отрисовке, есть ли аппаратная акселерация графики (DirectX, OpenGL, OpenCL,..) и поддержка оной драйверами операционки. Если проц слабый, двойная буферизация не помогает и нет акселерации то придется искать оптимальную (для начала эффективнее чем FPImage) GUi-библиотеку - ту же Qt. Насколько помню, LCL имеет вариант настройки на оную.
Ответить