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/ |