OberonCore
https://forum.oberoncore.ru/

О введении двойной буферизации в BlackBox Framework
https://forum.oberoncore.ru/viewtopic.php?f=24&t=6171
Страница 1 из 1

Автор:  Илья Ермаков [ Понедельник, 20 Ноябрь, 2017 21:43 ]
Заголовок сообщения:  О введении двойной буферизации в BlackBox Framework

Насколько я понимаю механику каркаса, двойной буферизации в нём нет.

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

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

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

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

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

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

Автор:  Пётр Кушнир [ Понедельник, 20 Ноябрь, 2017 22:01 ]
Заголовок сообщения:  Re: О введении двойной буферизации в BlackBox Framework

Цикл рисования оконного фрейма в ББ как-то разделён на две части, если мне не изменяет память, RestoreRoot открывает и закрывает буфер порта, вот здесь мы и делали рисование на заднем кадре (порта OpenGL), а потом flip (уже в кишках порта), кажется такой вариант был в ходу. Правда это имело свои последствия. Приходилось иногда форсировать перерисовку всего окна (благо, в OpenGL это дешёво), но в ББ не каждый View такое поддерживает, кажется, что-то уходило в stack overflow. Уже не помню. Но не мигало, что радовало.

Автор:  Trurl [ Вторник, 21 Ноябрь, 2017 08:14 ]
Заголовок сообщения:  Re: О введении двойной буферизации в BlackBox Framework

Двойная буферизация - термин из тех времен, когда программы напрямую писали в регистры видеоадаптера.
Видимо, речь просто о буферизации. Но она есть.

Автор:  Иван Денисов [ Вторник, 21 Ноябрь, 2017 10:02 ]
Заголовок сообщения:  Re: О введении двойной буферизации в BlackBox Framework

Просится сделать всю вьюшку на OpenGL... В режиме конструктора можно использовать стандартную форму, а в дело выводить OpenGL форму.

Автор:  Илья Ермаков [ Вторник, 21 Ноябрь, 2017 11:28 ]
Заголовок сообщения:  Re: О введении двойной буферизации в BlackBox Framework

Trurl писал(а):
Двойная буферизация - термин из тех времен, когда программы напрямую писали в регистры видеоадаптера.
Видимо, речь просто о буферизации. Но она есть.


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

Автор:  Trurl [ Вторник, 21 Ноябрь, 2017 13:03 ]
Заголовок сообщения:  Re: О введении двойной буферизации в BlackBox Framework

Нет. Только если HostPorts.noBuffer = TRUE.

Автор:  Wlad [ Вторник, 21 Ноябрь, 2017 17:24 ]
Заголовок сообщения:  Re: О введении двойной буферизации в BlackBox Framework

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/