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

IMGUI (immediate mode graphic user interface, Графический интерфейс немедленного режима) представляет собой шаблон проектирования графического пользовательского интерфейса, который использует API немедленного режима для отображения элементов управления, в отличие от сохраненного режима .[1]

Схематическое объяснение графического API немедленного режима

Реализации править

Большая часть инструментария виджетов IMGUI реализована в системных элементах управления по умолчанию и пользовательском рендеринге для разработки игр и графических приложений. Самая популярная реализация — библиотека Dear ImGui.

Для реализации видеоигры, пользовательский интерфейс должен:

  • обновляться синхронно с игровой сценой или сложной графикой.
  • быть наложенным поверх игровой сцены или сложной графики (что особенно легко в обоих случаях тогда, когда и GUI, и игровая сцена управляются одним циклом).
  • иметь необычный внешний вид. Это означает, что в пользовательском интерфейсе непосредственного режима клиентский код содержит свои собственные примитивы рендеринга и дизайн API, которые влияют на реализацию графического конвейера .

Инструментарий виджета GUI непосредственного режима

  • является более прямым в том смысле, что дерево виджетов часто представляет собой дерево вызовов функций, которое является составным и гибким, но с которым трудно взаимодействовать.
  • менее сложный и простой для понимания (с точки зрения меньшего количества неявных предположений на вызов API набора инструментов). Обычно это также приводит к меньшей функциональности.
  • является более сложным для создания и управления (обычно требуется больше вызовов API для управления виджетами), чем простое дерево виджетов, включая макет (абсолютное и относительное позиционирование со ссылкой на родителя или братьев и сестер).
  • имеет менее сложную окклюзионную отбраковку (z-буферизацию), проверку попадания, обработку изменения состояния, прокрутку и анимацию фокуса/управления горячими клавишами (виджет). Это также подразумевает необходимость управления самим логическим/визуальным деревом.
  • приходится полностью перестраивать буферы вершин с нуля для каждого нового кадра .
  • может создать постоянную нагрузку на ЦП, если не использовать шейдеры, загруженные на ГП .

Наборы инструментов для виджетов с графическим интерфейсом в немедленном режиме — хороший выбор для тех, кто предпочитает простой, легко изменяемый и расширяемый графический инструментарий. Обычно они являются универсальными, с открытым исходным кодом и кроссплатформенными. Одним из способов обеспечить гибкость и компоновку графического интерфейса в немедленном режиме без недостатков, связанных с сохранением дерева виджетов только в вызовах функций, при отсутствии прямого контроля над тем, как графический интерфейс отрисовывается в движке рендеринга, было бы использование виртуального дерева виджетов, точно так же, как React использует виртуальный DOM.

История править

Кейси Муратори разработал эту технику и ввел термин «Графический пользовательский интерфейс в одноканальном (singlepath) режиме немедленного доступа» для ее описания.[2] Одна из самых ранних общедоступных реализаций была написана Шоном Барреттом.[3]

Другие типы графического интерфейса немедленного режима править

Примечания править

  1. Radich. Retained Mode Versus Immediate Mode. Win32 apps. Microsoft (30 мая 2018). Дата обращения: 21 декабря 2019. Архивировано 19 августа 2022 года.
  2. Immediate-Mode Graphical User Interfaces (2005) (англ.). Immediate-Mode Graphical User Interfaces (2005). Дата обращения: 15 июня 2021. Архивировано 6 мая 2021 года.
  3. Sample IMGUI implementation and demo program. silverspaceship.com. Дата обращения: 15 июня 2021. Архивировано 6 мая 2021 года.
  4. Cornut. ocornut/imgui: Dear ImGui: Bloat-free Immediate Mode Graphical User interface for C++ with minimal dependencies. GitHub (22 декабря 2019). Дата обращения: 6 мая 2023. Архивировано 2 мая 2023 года.
  5. 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 года.
  6. egui: an easy-to-use immediate mode GUI in pure Rust. GitHub (3 июня 2021). Дата обращения: 6 мая 2023. Архивировано 11 мая 2023 года.
  7. Gio - immediate mode GUI in Go. giDoui.org. Дата обращения: 14 ноября 2019. Архивировано 14 ноября 2019 года.
  8. Korrovits. actsl/kiss_sdl: Simple generic GUI widget toolkit for SDL2. GitHub (19 декабря 2019). Дата обращения: 6 мая 2023. Архивировано 19 апреля 2023 года.
  9. Nuklear. — 2023-05-06. Архивировано 28 апреля 2023 года.