Графический интерфейс немедленного режима

IMGUI (immediate mode graphic user interface, Графический интерфейс немедленного режима) представляет собой шаблон проектирования графического пользовательского интерфейса, который использует API немедленного режима для отображения элементов управления, в отличие от сохраненного режима .[1]
Реализации
Большая часть инструментария виджетов IMGUI реализована в системных элементах управления по умолчанию и пользовательском рендеринге для разработки игр и графических приложений. Самая популярная реализация — библиотека Dear ImGui.
Для реализации видеоигры, пользовательский интерфейс должен:
- обновляться синхронно с игровой сценой или сложной графикой.
- быть наложенным поверх игровой сцены или сложной графики (что особенно легко в обоих случаях тогда, когда и GUI, и игровая сцена управляются одним циклом).
- иметь необычный внешний вид. Это означает, что в пользовательском интерфейсе непосредственного режима клиентский код содержит свои собственные примитивы рендеринга и дизайн API, которые влияют на реализацию графического конвейера .
Инструментарий виджета GUI непосредственного режима
- является более прямым в том смысле, что дерево виджетов часто представляет собой дерево вызовов функций, которое является составным и гибким, но с которым трудно взаимодействовать.
- менее сложный и простой для понимания (с точки зрения меньшего количества неявных предположений на вызов API набора инструментов). Обычно это также приводит к меньшей функциональности.
- является более сложным для создания и управления (обычно требуется больше вызовов API для управления виджетами), чем простое дерево виджетов, включая макет (абсолютное и относительное позиционирование со ссылкой на родителя или братьев и сестер).
- имеет менее сложную окклюзионную отбраковку (z-буферизацию), проверку попадания, обработку изменения состояния, прокрутку и анимацию фокуса/управления горячими клавишами (виджет). Это также подразумевает необходимость управления самим логическим/визуальным деревом.
- приходится полностью перестраивать буферы вершин с нуля для каждого нового кадра .
- может создать постоянную нагрузку на ЦП, если не использовать шейдеры, загруженные на ГП .
Наборы инструментов для виджетов с графическим интерфейсом в немедленном режиме — хороший выбор для тех, кто предпочитает простой, легко изменяемый и расширяемый графический инструментарий. Обычно они являются универсальными, с открытым исходным кодом и кроссплатформенными. Одним из способов обеспечить гибкость и компоновку графического интерфейса в немедленном режиме без недостатков, связанных с сохранением дерева виджетов только в вызовах функций, при отсутствии прямого контроля над тем, как графический интерфейс отрисовывается в движке рендеринга, было бы использование виртуального дерева виджетов, точно так же, как React использует виртуальный DOM.
История
Кейси Муратори разработал эту технику и ввел термин «Графический пользовательский интерфейс в одноканальном (singlepath) режиме немедленного доступа» для ее описания.[2] Одна из самых ранних общедоступных реализаций была написана Шоном Барреттом.[3]
Другие типы графического интерфейса немедленного режима
- Dear ImGui[4], написанный на C++ и поддерживающий несколько графических API (Allegro 5, Direct3D 9/10/11/12, GLFW, iOS, Marmalade, Metal, OpenGL, SDL2 и Vulkan), который также имеет:
- Gio[7] для Go
- kiss_sdl[8] для SDL
- nuklear[9]с бэкендами для нескольких графических библиотек (Direct3D, GLFW, OpenGL, SDL, SFML, Wayland, Windows GDI, Window GDI+ и X11)
Примечания
- ↑ Radich. Retained Mode Versus Immediate Mode . Win32 apps. Microsoft (30 мая 2018). Дата обращения: 21 декабря 2019. Архивировано 19 августа 2022 года.
- ↑ Immediate-Mode Graphical User Interfaces (2005) (англ.). Immediate-Mode Graphical User Interfaces (2005). Дата обращения: 15 июня 2021. Архивировано 6 мая 2021 года.
- ↑ Sample IMGUI implementation and demo program. silverspaceship.com. Дата обращения: 15 июня 2021. Архивировано 6 мая 2021 года.
- ↑ Cornut. ocornut/imgui: Dear ImGui: Bloat-free Immediate Mode Graphical User interface for C++ with minimal dependencies . GitHub (22 декабря 2019). Дата обращения: 6 мая 2023. Архивировано 2 мая 2023 года.
- ↑ kotlin-graphics. kotlin-graphics/imgui: Bloat-free Immediate Mode Graphical User interface for JVM with minimal dependencies (rewrite of dear imgui) . GitHub (19 декабря 2019). Дата обращения: 6 мая 2023. Архивировано 19 апреля 2023 года.
- ↑ egui: an easy-to-use immediate mode GUI in pure Rust . GitHub (3 июня 2021). Дата обращения: 6 мая 2023. Архивировано 11 мая 2023 года.
- ↑ Gio - immediate mode GUI in Go . giDoui.org. Дата обращения: 14 ноября 2019. Архивировано 14 ноября 2019 года.
- ↑ Korrovits. actsl/kiss_sdl: Simple generic GUI widget toolkit for SDL2 . GitHub (19 декабря 2019). Дата обращения: 6 мая 2023. Архивировано 19 апреля 2023 года.
- ↑ Nuklear. — 2023-05-06. Архивировано 28 апреля 2023 года.