Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.014 c
15-1207737974
Дмитрий С
2008-04-09 14:46
2008.05.25
Lines под Vista


11-1189518059
De2232345
2007-09-11 17:40
2008.05.25
Animation для kol


2-1209033156
Начинающий8
2008-04-24 14:32
2008.05.25
Удаление в QUERY


2-1209300169
homm
2008-04-27 16:42
2008.05.25
Как из Тmemo удалить последний перенос строки?


3-1198054213
Дядя Вова
2007-12-19 11:50
2008.05.25
Правильно отфильтровать поля




   Наверх