Если взять окно Firefox и повозюкать по нему другим окном, то вы не увидите никаких артефактов перерисовки окна.
Если взять окно Dolphin, то, аналогично, не будет никаких артефактов.
Если взять любое приложение на Gtk, то будет виден этот тихий ужас, когда обновляемая область окна сначала заливается цветом фона, а уже потом с ощутимой задержкой на ней появляется актуальное содержимое.
Почему?
Потому что Firefox и Qt буферизуют результат рендеринга окна и при последующих Expose не отрисовывают его заново, а просто копируют пиксели из буфера. Gtk так не делает.
Очевидно, что хранение пререндеренного пиксмапа и последующий рендеринг из него — более дешевая операция, чем постоянная перерисовка 100500 виджетов. Когда-то у xorg была поддержка backing store, решающая именно эту проблему: графический сервер мог сохранять содержимое окон и использовать его для отрисовки при изменении расположения окон. Сейчас эта фича объявлена устаревшей и выпилена. Лол, ок. Задача-то никуда не делась. Значит, этим должны заниматься тулкиты.
Теперь самое интересное: Gtk имеет поддержку двойной буферизации при выводе. Её предназначение в исключении «моргания» отрисовки интерфейса. Когда тулкит получает Expose, он создаёт пиксмап, равный по размеру обновляемой области. Весь рендеринг производится в этот пиксмап. После окончания рендеринга, содержимое пиксмапа копируется в окно одной командой (чем и обеспечивается отсутствие моргания), после чего пиксмап уничтожается.
Очевидно, что на самом деле вместо этой недоделанной двойной буферизации нам нужна полноценная буферизации всего содержимого окна в постоянно существующем пиксмапе. Реальный код перерисовки должен выполняться только при явном запросе со стороны виджетов, Expose же со стороны сервера должен всегда обрабатываться единственной операцией «скопировать пиксели».
Это я всё к чему. Очень чешутся руки взяться за допилку Gtk, и чем дольше я имею с ним дело, тем сильнее. Пока гномеры ваяют очередную ненужную DE, их тулкит продолжает оставаться изрядным говном. Лучше бы на тулкит силы направили.
Отговорите меня, кто-нибудь.
Ответ на:
комментарий
от snizovtsev
Ответ на:
комментарий
от geekless
Ответ на:
комментарий
от buddhist
Ответ на:
комментарий
от abraziv_whiskey
Ответ на:
комментарий
от ananas
Ответ на:
комментарий
от geekless
Ответ на:
комментарий
от thelonelyisland
Ответ на:
комментарий
от geekless
Ответ на:
комментарий
от Tweaker
Ответ на:
комментарий
от geekless
Ответ на:
комментарий
от geekless
Ответ на:
комментарий
от Relan
Ответ на:
комментарий
от geekless
Ответ на:
комментарий
от Artificial_Thought
Ответ на:
комментарий
от Rastafarra
Ответ на:
комментарий
от BattleCoder
Ответ на:
комментарий
от geekless
Ответ на:
комментарий
от geekless
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум [wayland]Еще шевелится (2010)
- Форум Следующий релиз Meego возмозно перейдет на Wayland (2011)
- Форум Двойная буферизация в gvim (2007)
- Форум Растягивание Widget в GTK2 + Двойная буферизация (2016)
- Форум [opennet]Дисплейный сервер Wayland официально стал проектом freedesktop.org (2010)
- Форум Буферизация «>» (2009)
- Новости Manjaro Linux 21.3 (2022)
- Форум буферизация OpenGL (2012)
- Форум буферизация stdio (2009)
- Форум буферизация printf() (2006)