Форум: "Игры";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
ВнизМерцает от перемещения Виндовых окон. Найти похожие ветки
← →
@!!ex © (2006-07-04 18:20) [0]Суть проста. OPenGL приложение.
Все красиво, супер и т.д.
Но стоит начать работать с каким нибудь виндовым окном(менять размер. позицию на экране), не сворачивая мой проект, как он начинает мерцать. Неприятно. Как можно попробовать решить эту порблему?
← →
Rial © (2006-07-04 18:30) [1]Так оно это, перерисовывается так.
Наиболее удобный выход - ловить события активации и деактивации формы и
хранить флаг, активна ли сейчас форма. Перерисовывать только активную форму.
А еще лучше - своричивать при деактивации.
Но, надо сказать, такое возможно только на слабом компе или с длительной
процедурой прорисовкой окна.
У тебя двойная буферизация включена ?
Ты на API пишешь, или с формой ?
← →
@!!ex © (2006-07-04 18:44) [2]>>Наиболее удобный выход - ловить события активации и деактивации формы и
хранить флаг, активна ли сейчас форма. Перерисовывать только активную форму.
А еще лучше - своричивать при деактивации.
Не катит. поскольку суть как раз в том, что можно в бэкграунде отслеживать изменения. Тоетсь работаешь в другом приложении, и краем глаза смотришь, что здесь проиходит.
>>Но, надо сказать, такое возможно только на слабом компе или с длительной процедурой прорисовкой окна.
Комп не топовый, но и не отстой.
>>У тебя двойная буферизация включена ?
Да.
>>Ты на API пишешь, или с формой ?
Кстати, да. Открыл Сишный WinAPI проект... Такого нет....
Как можно исправить под дельфей? Очень не хочеться отказывать от формы, хоть компонентов и не использую, переписывание сулит большие проблемы.... А проект завтра желательно показать генеральному и с главным программером детали желательно на работающем проекте обсуждать... :\
← →
Cash © (2006-07-04 19:36) [3]Перерисовка по таймеру происходит?
Или через WM_PAINT (OnPaint событие)?
Если по таймеру, то не по стандартному ли? (т. е. таймер не из System закладки?)
Если да, то его в топку, потом брать какойньть хороший таймер, а еще
лучше - с OnIdle событием Application-а работать.
← →
@!!ex © (2006-07-04 19:49) [4]Через message WM_PAINT. Только очередная перерисовка происходит только после того, как SwapBuffer предыдущий отработает.
ОнИдл не катит, потому что многое висит на событиях. Сеть в частности.
ProcessMessages - слишком тормозит все.
Сейчас отрисовываеться все и вызываеться InvalidateRect
← →
Cash © (2006-07-04 20:00) [5]А я что то говорил о ProcessMessages???
Глюконафтика у тебя и идет от юзания WM_PAINT сообщения, от него надо
отказываться!
И надо глядеть обоими глазами в сторону OnIdle события, пофигу, что
все остальное тоже на событиях виси, ничего от этого не поменяется!
В OnIdle событии, чтоб оно обновлялось почаще, первой строкой ставь
Done:=false, это скажет, что мы еще не закончили. Но при этом ничего
сверхестественного с остальной средой не случится, ты только отрисовку
туда засунь, ведь в ней весь рамс!
← →
DarkEagle (2006-07-04 20:15) [6]А что за событие такое, которое вы здесь описываете? OnIdle?
Ну на API это понятно как реализуеться, а на дельфе как?
← →
Cash © (2006-07-04 20:34) [7]OnIdle, событие объекта Application, срабатывает афигенно часто, если его
об этом попросить! :)
Перед заменой Application.OnIdle рекомендуется сделать бекап адреса
старого события, и вызывать его в своем.
Просят OnIdle быть побыстрее с помощью параметра Done, включаемого в
заголовок события. Коротче, Done:=false; и все.
← →
Vladimir Kladov (2006-07-04 21:06) [8]Мне кажется надо всего лишь перехватить WM_ERASEBKGND, сказать, что отработано, и ничего не делать. И пусть перерисовывается - но мелькать не будет.
← →
DarkEagle (2006-07-04 22:02) [9]Vladimir Kladov
Спасибо! Реальная тема!
← →
@!!ex © (2006-07-04 23:05) [10]Через Idle придеться много кода переписывать. Ща попробую через EraseBkgnd.... Сразу надо было пробовать... как не догадался?
← →
@!!ex © (2006-07-04 23:06) [11]Получилось! Только теперь мерцает кэпшен. Ну и фиг с ним. Почти не заметно. Спасибо, товарищи!
← →
Cash © (2006-07-05 09:39) [12]@!!ex ©:
Рпади прикола, сделай копию проекта и в ней весь код из WM_PAINT
(или WM_ERASEBKGND) перетащи в OnIdle с вставкой только одной
команды, Done:=false;
Поэксперементируй, над копией, этого же никто не запрещает,
опыт же всегда полезен...
← →
@!!ex © (2006-07-05 21:39) [13]>>опыт же всегда полезен...
Абсолютно согласен!
Попробую!
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.057 c