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

Реализации

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

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

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

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

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

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

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

Другие типы графического интерфейса немедленного режима Dear ImGui, написанный на C++ и поддерживающий несколько графических API (Allegro 5, Direct3D 9/10/11/12, GLFW, iOS, Marmalade, Metal, OpenGL, SDL2 и Vulkan), который также имеет: проекты для дополнительной серверной поддержки (Android, Irrlicht Engine, OGRE, SFML, ...); проекты для дополнительных языковых привязок (С#/.NET, D, Go, Haskell, Java, ...); порты на другие языки (например, Java); egui для Rust; Gio для Go kiss_sdl для SDL nuklearс бэкендами для нескольких графических библиотек (Direct3D, GLFW, OpenGL, SDL, SFML, Wayland, Windows GDI, Window GDI+ и X11)

Примечания

Категория:Графический интерфейс пользователя Категория:Компьютерная графика Категория:API