Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.25;
Скачать: CL | DM;

Вниз

Перерисовка в Lazarus е   Найти похожие ветки 

 
@!!ex ©   (2008-04-11 19:10) [0]

Прошу прощения что опять в "Прочее" пишу. Шансы получить ответ на этой недели в "FPC" - маловероятный.
Пишу обычное приложение(просмоторщик моделей). С формой.
Нужно форму постоянно перерисовывать. И отображаьб модель.
Как делал в дельфи:
OnPaint:
begin
 //Render
 SwapBuffers(DC);
 InvalidateRect(Handle,nil,false);
end;

Попробовал сделать тоже самое в Lazaruse.
Во-первых - видимо форма перед отрисовкой заливается цветом. В итоге я наблюдаю жесткое мерцание. ПРичем преимущественно вижу не результат отрисовки, а форму залитую цветом.
Второй момент - это то, что прога перестает реагировать на закрытие. Даже на Halt;


 
Eraser ©   (2008-04-11 19:40) [1]

> OnPaint:
> begin
> //Render
> SwapBuffers(DC);
> InvalidateRect(Handle,nil,false);

бесконечное зацикливание, зачем это?

> В итоге я наблюдаю жесткое мерцание

скорее всего проблема в erase background.


 
Sapersky   (2008-04-11 19:48) [2]

If the bErase parameter is TRUE for any part of the update region, the background is erased in the entire region, not just in the given part.
Может, какой-то контрол на форме перерисовывает себя через InvalidateRect фрагмента формы c bErase=True.

Другой способ получить постоянную перерисовку: OnIdle с Done := False, если оно есть в Лазарусе.


 
@!!ex ©   (2008-04-11 20:04) [3]

> бесконечное зацикливание, зачем это?

Надо рисовать анимированный объект. Как иначе?


> If the bErase parameter is TRUE for any part of the update
> region, the background is erased in the entire region, not
> just in the given part.
> Может, какой-то контрол на форме перерисовывает себя через
> InvalidateRect фрагмента формы c bErase=True.

Не. Форма пустая абсолютно.


> Другой способ получить постоянную перерисовку: OnIdle с
> Done := False, если оно есть в Лазарусе.

Нету...

Видимо придется переписать на WinAPI без форм...


 
Eraser ©   (2008-04-12 01:33) [4]

> [3] @!!ex ©   (11.04.08 20:04)
> > бесконечное зацикливание, зачем это?
>
> Надо рисовать анимированный объект. Как иначе?

по таймеру, не обязательно который на принципе wm_timer работает.
а иначе будет всегда 100% загрузка CPU.


 
grisme   (2008-04-12 08:08) [5]


> Eraser ©   (12.04.08 01:33) [4]


а если Sleep(1);? :-)


 
boa_kaa ©   (2008-04-12 08:41) [6]


> Eraser ©   (12.04.08 01:33) [4]

это обычная практика при отрисовке 3D графики
откуда по-твоему fps берутся?


 
Sapersky   (2008-04-12 17:35) [7]

> Другой способ получить постоянную перерисовку: OnIdle с
> Done := False, если оно есть в Лазарусе.
Нету...


На всякий случай уточню: TApplication.OnIdle.

Кстати, не очень понятно, зачем постоянный рендер в просмотрщике моделей. FPS можно посчитать и как 1000/RenderTime, хотя получится "не совсем тот" FPS, но изменения в производительности он отражать будет.



Страницы: 1 вся ветка

Текущий архив: 2008.05.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
2-1209709806
alshtam
2008-05-02 10:30
2008.05.25
Динамическое помещение картинок в dll


4-1189595802
aidyn
2007-09-12 15:16
2008.05.25
Как можно изменить региональные настройки


3-1197919573
Taurus
2007-12-17 22:26
2008.05.25
Проблема скорости работы


15-1208088137
cevek
2008-04-13 16:02
2008.05.25
Заказ. Нужно распаковать программу.


2-1208955685
Кирей
2008-04-23 17:01
2008.05.25
не срабатывает простой запрос