Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
15-1177672151
Иксик
2007-04-27 15:09
2007.05.27
Снова, уж простите


4-1166907320
Степан
2006-12-23 23:55
2007.05.27
НЕстандартная панель инструментов


15-1177699000
koha
2007-04-27 22:36
2007.05.27
Кто пользуется Process Monitor от www.sysinternals.com?


2-1178242703
porting
2007-05-04 05:38
2007.05.27
sendkey в неактивном окне как hotkey


15-1178077566
Slider007
2007-05-02 07:46
2007.05.27
С днем рождения ! 2 мая





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский