(Эта библиотека доступна по бесплатной и разрешительной лицензии, но ей необходима финансовая поддержка для постоянного совершенствования. Помимо обслуживания и стабильности, еще предстоит добавить много желательных функций. Если ваша компания использует Dear ImGui, рассмотрите возможность обращения к нам. .)
Предприятия: поддержка непрерывной разработки и обслуживания посредством контрактов на спонсорство/поддержку с выставлением счетов:
Электронная почта: свяжитесь с @dearimgui dot com.
Частные лица: поддержите дальнейшее развитие и обслуживание здесь. Также смотрите страницу «Финансирование».
Презентация - Использование - Как это работает - Релизы и журналы изменений - Демо - Начало работы и интеграция |
---|
Галерея – Поддержка, часто задаваемые вопросы – Как помочь – Финансирование и спонсоры – Кредиты – Лицензия |
Wiki – Расширения – Привязки языков и серверные части фреймворков – Программное обеспечение с использованием Dear ImGui – Цитаты пользователей |
Дорогой ImGui — это свободная от раздувания библиотека графического пользовательского интерфейса для C++ . Он выводит оптимизированные буферы вершин, которые вы можете визуализировать в любое время в приложении с поддержкой 3D-конвейера. Он быстрый, портативный, не зависит от рендеринга и автономен (без внешних зависимостей).
Дорогой ImGui предназначен для обеспечения быстрых итераций и предоставления программистам возможности создавать инструменты создания контента и инструменты визуализации/отладки (в отличие от пользовательского интерфейса для обычного конечного пользователя). Он способствует простоте и производительности для достижения этой цели и лишен некоторых функций, обычно встречающихся в библиотеках более высокого уровня. Помимо прочего, не поддерживается полная интернационализация (текст с письмом справа налево, двунаправленный текст, формирование текста и т. д.) и специальные возможности.
Дорогой ImGui особенно подходит для интеграции в игровые движки (для инструментов), 3D-приложения реального времени, полноэкранные приложения, встроенные приложения или любые приложения на консольных платформах, где функции операционной системы нестандартны.
Ядро Dear ImGui содержится в нескольких файлах, не зависящих от платформы , которые вы можете легко скомпилировать в своем приложении/движке. Это все файлы в корневой папке репозитория (imgui*.cpp, imgui*.h). Никакого специального процесса сборки не требуется . Вы можете добавить файлы .cpp в существующий проект.
Серверные компоненты для различных графических API и платформ рендеринга предоставляются в папке backends/, а также примеры приложений в папке example/. Вы также можете создать свой собственный бэкэнд. Везде, где вы можете визуализировать текстурированные треугольники, вы можете визуализировать Dear ImGui.
Дополнительные сведения см. в разделе «Начало работы и интеграция» этого документа.
После того, как Dear ImGui настроен в вашем приложении, вы можете использовать его из любого места в своем программном цикле:
ImGui::Text ( " Hello, world %d " , 123 );
if (ImGui::Button( " Save " ))
MySaveFunction ();
ImGui::InputText ( " string " , buf, IM_ARRAYSIZE(buf));
ImGui::SliderFloat ( " float " , &f, 0 . 0f , 1 . 0f );
// Create a window called "My First Tool", with a menu bar.
ImGui::Begin ( " My First Tool " , &my_tool_active, ImGuiWindowFlags_MenuBar);
if (ImGui::BeginMenuBar())
{
if ( ImGui::BeginMenu ( " File " ))
{
if ( ImGui::MenuItem ( " Open.. " , " Ctrl+O " )) { /* Do stuff */ }
if ( ImGui::MenuItem ( " Save " , " Ctrl+S " )) { /* Do stuff */ }
if ( ImGui::MenuItem ( " Close " , " Ctrl+W " )) { my_tool_active = false ; }
ImGui::EndMenu ();
}
ImGui::EndMenuBar ();
}
// Edit a color stored as 4 floats
ImGui::ColorEdit4 ( " Color " , my_color);
// Generate samples and plot them
float samples[ 100 ];
for ( int n = 0 ; n < 100 ; n++)
samples[n] = sinf(n * 0 . 2f + ImGui::GetTime() * 1 . 5f );
ImGui::PlotLines ( " Samples " , samples, 100 );
// Display contents in a scrolling region
ImGui::TextColored (ImVec4( 1 , 1 , 0 , 1 ), "Important Stuff");
ImGui::BeginChild ( " Scrolling " );
for ( int n = 0 ; n < 50 ; n++)
ImGui::Text ( " %04d: Some text " , n);
ImGui::EndChild ();
ImGui::End ();
Дорогой ImGui позволяет создавать как сложные инструменты , так и очень недолговечные. Крайняя сторона недолговечности: используя функцию Edit&Continue (горячая перезагрузка кода) современных компиляторов, вы можете добавить несколько виджетов для настройки переменных во время работы вашего приложения и удалить код через минуту! Дорогой ImGui предназначен не только для настройки значений. Вы можете использовать его для отслеживания работающего алгоритма, просто отправляя текстовые команды. Вы можете использовать его вместе со своими собственными данными отражений для просмотра набора данных в реальном времени. Вы можете использовать его для раскрытия внутреннего содержимого подсистемы вашего движка, для создания средства ведения журнала, инструмента проверки, профилировщика, отладчика, целого редактора/фреймворка для создания игр и т. д.
Парадигма IMGUI через свой API пытается свести к минимуму избыточное дублирование состояния, синхронизацию состояния и сохранение состояния с точки зрения пользователя. Он менее подвержен ошибкам (меньше кода и меньше ошибок), чем традиционные интерфейсы с сохраненным режимом, и подходит для создания динамических пользовательских интерфейсов. Для получения более подробной информации посетите раздел Wiki «О парадигме IMGUI».
Дорогой ImGui выводит буферы вершин и списки команд, которые вы можете легко отобразить в своем приложении. Количество вызовов отрисовки и изменений состояния, необходимых для их рендеринга, довольно невелико. Поскольку Dear ImGui не знает и не касается состояния графики напрямую, вы можете вызывать его функции в любом месте вашего кода (например, в середине работающего алгоритма или в середине вашего собственного процесса рендеринга). Обратитесь к примерам приложений в папке example/ для получения инструкций по интеграции Dear ImGui с существующей базой кода.
Распространенное заблуждение состоит в том, что графический интерфейс немедленного режима ошибочно принимают за рендеринг в немедленном режиме, что обычно подразумевает загрузку вашего драйвера/графического процессора кучей неэффективных вызовов отрисовки и изменений состояния при вызове функций графического интерфейса. Это НЕ то, что делает Дорогой ImGui. Дорогой ImGui выводит буферы вершин и небольшой список пакетов вызовов отрисовки. Он никогда не касается вашего графического процессора напрямую. Пакеты вызовов отрисовки достаточно оптимальны, и вы можете визуализировать их позже, в своем приложении или даже удаленно.
См. страницу «Релизы» для оформления журналов изменений. Чтение журналов изменений — хороший способ быть в курсе того, что может предложить Dear ImGui, и, возможно, даст вам представление о некоторых функциях, которые вы до сих пор игнорировали!
Вызов функции ImGui::ShowDemoWindow()
создаст демонстрационное окно, демонстрирующее различные функции и примеры. Код всегда доступен для справки в imgui_demo.cpp
. Вот как выглядит демо.
Вы должны уметь создавать примеры из исходников. Если нет, дайте нам знать! Если вы хотите быстро ознакомиться с некоторыми функциями Dear ImGui, вы можете скачать двоичные файлы демо-приложения для Windows здесь:
Демонстрационные приложения не поддерживают DPI, поэтому на экране 4K можно ожидать некоторой размытости. Чтобы обеспечить осведомленность о DPI в вашем приложении, вы можете загрузить/перезагрузить шрифт в другом масштабе и масштабировать свой стиль с помощью style.ScaleAllSizes()
(см. FAQ).
Подробности смотрите в руководстве «Приступая к работе».
На большинстве платформ и при использовании C++ вы сможете использовать комбинацию бэкэндов imgui_impl_xxxx без изменений (например, imgui_impl_win32.cpp
+ imgui_impl_dx11.cpp
). Если ваш движок поддерживает несколько платформ, рассмотрите возможность использования большего количества файлов imgui_impl_xxxx вместо их переписывания: это облегчит вам работу, и вы сможете немедленно запустить Dear ImGui. Позже вы можете решить переписать собственный бэкэнд, используя свои собственные функции движка, если захотите.
Интеграция Dear ImGui в ваш собственный движок заключается в 1) подключении входов мыши/клавиатуры/геймпада 2) загрузке текстуры в ваш графический процессор/движок рендеринга 3) предоставлении функции рендеринга, которая может связывать текстуры и отображать текстурированные треугольники, что, по сути, и есть Бэкенды делают. Папка example/ заполнена приложениями, которые делают именно это: настраивают окно и используют серверные части. Если вы будете следовать руководству по началу работы, теоретически интеграция Dear ImGui займет у вас меньше часа. Обязательно потратьте время на чтение часто задаваемых вопросов, комментариев и примеров приложений!
Официально поддерживаемые бэкэнды/привязки (в репозитории):
Вики-страница сторонних бэкэндов/привязок:
Вики-страница полезных расширений/виджетов:
Также посетите Wiki для получения дополнительных ссылок и идей.
Примеры проектов с использованием Dear ImGui: Tracy (профилировщик), ImHex (шестнадцатеричный редактор/анализ данных), RemedyBG (отладчик) и сотни других.
Дополнительные скриншоты проектов с использованием Dear ImGui, отправленные пользователями, можно найти в разделах галереи!
Список сторонних виджетов и расширений можно найти на вики-странице «Полезные расширения/Виджеты».
Кастомный движок эрхе (док-ветка) | Пользовательский движок для Wonder Boy: The Dragon's Trap (2017) |
Пользовательский движок (без названия) | Профилировщик Трейси (GitHub) |
См.: Часто задаваемые вопросы (FAQ), где даны ответы на распространенные вопросы.
См.: Начало работы и Wiki для множества ссылок, ссылок и статей.
См. статьи о парадигме IMGUI, чтобы прочитать/узнать о парадигме графического интерфейса немедленного режима.
См.: Предстоящие изменения.
См.: Дорогой ImGui Test Engine + Test Suite для автоматизации и тестирования.
Чтобы заставить поисковые системы сканировать вики, вот ссылка на Crawlable Wiki (не для людей, вот почему).
Начиная? Если у начинающих пользователей возникают проблемы с компиляцией/связыванием/запуском или загрузкой шрифтов, используйте обсуждения GitHub. По ЛЮБЫМ другим вопросам, отчетам об ошибках, просьбам и отзывам пишите в разделе «Проблемы» на GitHub. Пожалуйста, внимательно прочтите и заполните шаблон нового выпуска.
Частная поддержка доступна для платных бизнес-клиентов (электронная почта: контакт @ Dearimgui dot com ).
Какую версию мне следует получить?
Мы иногда помечаем релизы (с красивыми примечаниями к релизам), но в целом это безопасно и рекомендуется синхронизироваться с последней master
или docking
веткой. Библиотека довольно стабильна, и регрессии, как правило, быстро исправляются при сообщении о них. Опытные пользователи могут захотеть использовать ветку docking
с функциями Multi-Viewport и Docking. Эта ветка регулярно синхронизируется с master.
Кто пользуется Dear ImGui?
См. «Цитаты», «Финансирование и спонсоры» и «Программное обеспечение с использованием страниц Dear ImGui Wiki», чтобы получить представление о том, кто использует Dear ImGui. Пожалуйста, добавьте свою игру/программное обеспечение, если можете! Также смотрите темы галереи!
Как я могу помочь?
Продолжается Дорогой, разработка ImGui осуществляется и поддерживается при финансовой поддержке пользователей и частных спонсоров.
Пожалуйста, ознакомьтесь с подробным списком нынешних и прошлых спонсоров и спонсоров «Уважаемые ImGui» .
С ноября 2014 по декабрь 2019 года продолжающаяся разработка также финансировалась пользователями Patreon и за счет индивидуальных пожертвований.
СПАСИБО всем бывшим и нынешним сторонникам за помощь в поддержании жизни и процветания этого проекта!
Дорогой ImGui использует программное обеспечение и услуги, предоставляемые бесплатно для проектов с открытым исходным кодом:
Разработан Омаром Корнутом и всеми прямыми или косвенными участниками GitHub. Ранняя версия этой библиотеки была разработана при поддержке Media Molecule и впервые использовалась в игре Tearaway (PS Vita).
Среди постоянных участников — Рокас Купстис @rokups (2020–2022): значительная часть работы над системой автоматизации и регрессионными тестами теперь доступна в Dear ImGui Test Engine.
Контракты на обслуживание/поддержку, спонсорские счета и другие транзакции B2B размещаются и обрабатываются Disco Hello.
Омар: «Я впервые обнаружил парадигму IMGUI в Q-Games, где Атман Бинсток вложил в кодовую базу свою собственную простую реализацию, над которой я потратил довольно много времени, улучшая и обдумывая ее. Оказалось, что Атман познакомился с этой концепцией непосредственно, работая с Кейси. Когда я перешел в Media Molecule, я переписал новую библиотеку, пытаясь преодолеть недостатки и ограничения первой, с которой я работал. Она стала этой библиотекой, и с тех пор я потратил неразумные деньги. количество времени, потраченное на его итерацию и улучшение».
Встроен шрифт ProggyClean.ttf от Тристана Гриммера (лицензия MIT).
Встраивает stb_textedit.h, stb_truetype.h, stb_rect_pack.h автора Шона Барретта (общественное достояние).
Вдохновение, отзывы и тестирование ранних версий: Кейси Муратори, Атман Бинсток, Микко Мононен, Эммануэль Брайни, Стефан Камода, Антон Михайлов, Мэтт Уиллис. Также спасибо всем, кто публикует отзывы, вопросы и исправления на GitHub.
Дорогой ImGui распространяется под лицензией MIT, дополнительную информацию см. в файле LICENSE.txt.