OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 10:22

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: Понедельник, 20 Ноябрь, 2017 21:43 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Насколько я понимаю механику каркаса, двойной буферизации в нём нет.

Избегание моргания организовано за счёт отложенного обновления, только изменившихся прямоугольников.

Экономили память когда-то.

Проблема может быть у высокодинамичных вьюшек.

А мы столкнулись с другой проблемой: когда на форме одновременно от десятка и больше динамических вьюшек (например, в состоянии моргания), то начинается перерисовка всей формы с её морганием. Т.е., видимо, количество прямоугольников к обновлению становится таким, что каркас уже инициирует полную перерисовку окна.

Видимо, целесообразно просто ввести двойную буферизацию на уровне окон (чтобы вся перерисовка вьюшек шла на невидимом контексте, а уж затем он целиком отображался на экран).

В связи с этим вопрос:
- кто-нибудь из коллег занимался чем-то таким в альтернативных сборках - во Фриниксе или в ОпенГЛ-варианте?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Ноябрь, 2017 22:01 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Цикл рисования оконного фрейма в ББ как-то разделён на две части, если мне не изменяет память, RestoreRoot открывает и закрывает буфер порта, вот здесь мы и делали рисование на заднем кадре (порта OpenGL), а потом flip (уже в кишках порта), кажется такой вариант был в ходу. Правда это имело свои последствия. Приходилось иногда форсировать перерисовку всего окна (благо, в OpenGL это дешёво), но в ББ не каждый View такое поддерживает, кажется, что-то уходило в stack overflow. Уже не помню. Но не мигало, что радовало.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Ноябрь, 2017 08:14 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Двойная буферизация - термин из тех времен, когда программы напрямую писали в регистры видеоадаптера.
Видимо, речь просто о буферизации. Но она есть.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Ноябрь, 2017 10:02 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Просится сделать всю вьюшку на OpenGL... В режиме конструктора можно использовать стандартную форму, а в дело выводить OpenGL форму.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Ноябрь, 2017 11:28 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Trurl писал(а):
Двойная буферизация - термин из тех времен, когда программы напрямую писали в регистры видеоадаптера.
Видимо, речь просто о буферизации. Но она есть.


Так, насколько я понимаю, нет - когда отрабатывает Restore, то вьюшка рисует непосредственно на DC окна.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Ноябрь, 2017 13:03 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Нет. Только если HostPorts.noBuffer = TRUE.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Ноябрь, 2017 17:24 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Быть может - не совсем в тему.
В нескольких из редакторов мнемосхем (и в самом "движке" их прорисовки-вывода), я применял GDI-шные "регионы". Этим уходил от избыточного "мигания" при перерисовке.
То есть, каждый из объектов имел свои "изначальный регион прорисовки" и "регион-результат". Последний получался путём "вычитания"/"исключения" из изначального региона регионов объектов, лежащих "над" данным объектом.
За счёт ограничений вывода через GDI-шную обрезку рисования всего, что было вне регионов, получались очень красивые эффекты, за счёт того что виндовые регионы могут быть не только прямоугольной (или эллипсоидной формы).
Применялось только в винде.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB