Форум: "Прочее";
Текущий архив: 2008.05.25;
Скачать: [xml.tar.bz2];
ВнизПерерисовка в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c