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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Схематическое объяснение графического API немедленного режима

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

Реализации[править | править код]

Большая часть инструментария виджетов 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 года.