(Diese Bibliothek ist unter einer kostenlosen und freizügigen Lizenz verfügbar, benötigt jedoch finanzielle Unterstützung, um ihre kontinuierlichen Verbesserungen aufrechtzuerhalten. Zusätzlich zur Wartung und Stabilität müssen noch viele wünschenswerte Funktionen hinzugefügt werden. Wenn Ihr Unternehmen Dear ImGui verwendet, denken Sie bitte darüber nach, sich an uns zu wenden .)
Unternehmen: Unterstützen Sie die weitere Entwicklung und Wartung über in Rechnung gestellte Sponsoring-/Supportverträge:
E-Mail: contact @ Dearimgui dot com
Einzelpersonen: Unterstützen Sie hier die weitere Entwicklung und Wartung. Siehe auch Seite „Finanzierung“.
Der Pitch – Nutzung – Wie es funktioniert – Releases & Changelogs – Demo – Erste Schritte & Integration |
---|
Galerie – Support, FAQ – So helfen Sie – Finanzierung und Sponsoren – Credits – Lizenz |
Wiki – Erweiterungen – Sprachbindungen und Frameworks-Backends – Software, die Dear ImGui verwendet – Benutzerzitate |
Dear ImGui ist eine aufblähungsfreie grafische Benutzeroberflächenbibliothek für C++ . Es gibt optimierte Vertexpuffer aus, die Sie jederzeit in Ihrer 3D-Pipeline-fähigen Anwendung rendern können. Es ist schnell, portabel, Renderer-unabhängig und eigenständig (keine externen Abhängigkeiten).
Dear ImGui wurde entwickelt, um schnelle Iterationen zu ermöglichen und Programmierern die Möglichkeit zu geben, Tools zur Inhaltserstellung und Visualisierungs-/Debugging-Tools zu erstellen (im Gegensatz zur Benutzeroberfläche für den durchschnittlichen Endbenutzer). Um dieses Ziel zu erreichen, stehen Einfachheit und Produktivität im Vordergrund und es fehlen bestimmte Funktionen, die üblicherweise in höherwertigen Bibliotheken zu finden sind. Unter anderem werden vollständige Internationalisierung (Rechts-nach-Links-Text, bidirektionaler Text, Textgestaltung usw.) und Barrierefreiheitsfunktionen nicht unterstützt.
Dear ImGui eignet sich besonders für die Integration in Spiele-Engines (für Tools), Echtzeit-3D-Anwendungen, Vollbildanwendungen, eingebettete Anwendungen oder alle Anwendungen auf Konsolenplattformen, bei denen Betriebssystemfunktionen nicht dem Standard entsprechen.
Der Kern von Dear ImGui ist in wenigen plattformunabhängigen Dateien enthalten , die Sie problemlos in Ihrer Anwendung/Engine kompilieren können. Dabei handelt es sich um alle Dateien im Stammordner des Repositorys (imgui*.cpp, imgui*.h). Es ist kein spezieller Build-Prozess erforderlich . Sie können die .cpp-Dateien zu Ihrem bestehenden Projekt hinzufügen.
Backends für eine Vielzahl von Grafik-APIs und Rendering-Plattformen werden im Ordner „backends/“ bereitgestellt, zusammen mit Beispielanwendungen im Ordner „examples/“. Sie können auch Ihr eigenes Backend erstellen. Überall dort, wo Sie strukturierte Dreiecke rendern können, können Sie Dear ImGui rendern.
Weitere Einzelheiten finden Sie im Abschnitt „Erste Schritte und Integration“ dieses Dokuments.
Nachdem Dear ImGui in Ihrer Anwendung eingerichtet ist, können Sie es von _überall_ in Ihrer Programmschleife verwenden:
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 ();
Mit Dear ImGui können Sie sowohl aufwendige als auch sehr kurzlebige Tools erstellen . Auf der extremen Seite der Kurzlebigkeit: Mit der Edit&Continue-Funktion (Hot Code Reload) moderner Compiler können Sie ein paar Widgets hinzufügen, um Variablen zu optimieren, während Ihre Anwendung ausgeführt wird, und den Code eine Minute später entfernen! Dear ImGui dient nicht nur der Optimierung von Werten. Sie können damit einen laufenden Algorithmus verfolgen, indem Sie einfach Textbefehle ausgeben. Sie können es zusammen mit Ihren eigenen Reflexionsdaten verwenden, um Ihren Datensatz live zu durchsuchen. Sie können es verwenden, um die Interna eines Subsystems in Ihrer Engine offenzulegen, um einen Logger, ein Inspektionstool, einen Profiler, einen Debugger, einen ganzen Spieleeditor/Framework usw. zu erstellen.
Das IMGUI-Paradigma versucht durch seine API, überflüssige Zustandsduplizierung, Zustandssynchronisierung und Zustandsbeibehaltung aus Sicht des Benutzers zu minimieren. Es ist weniger fehleranfällig (weniger Code und weniger Fehler) als herkömmliche Schnittstellen im beibehaltenen Modus und eignet sich für die Erstellung dynamischer Benutzeroberflächen. Weitere Informationen finden Sie im Wiki-Abschnitt „Über das IMGUI-Paradigma“.
Dear ImGui gibt Vertexpuffer und Befehlslisten aus, die Sie problemlos in Ihrer Anwendung rendern können. Die Anzahl der zum Rendern erforderlichen Draw-Aufrufe und Statusänderungen ist relativ gering. Da Dear ImGui den Grafikstatus nicht direkt kennt oder berührt, können Sie seine Funktionen an einer beliebigen Stelle in Ihrem Code aufrufen (z. B. mitten in einem laufenden Algorithmus oder mitten in Ihrem eigenen Renderprozess). Anweisungen zur Integration von Dear ImGui in Ihre vorhandene Codebasis finden Sie in den Beispielanwendungen im Ordner „examples/“.
Ein häufiges Missverständnis besteht darin, die GUI im Sofortmodus mit der Wiedergabe im Sofortmodus zu verwechseln, was normalerweise bedeutet, dass Ihr Treiber/Ihre GPU beim Aufruf der GUI-Funktionen mit einer Reihe ineffizienter Zeichenaufrufe und Zustandsänderungen überhäuft wird. Das ist NICHT das, was Dear ImGui tut. Dear ImGui gibt Vertex-Puffer und eine kleine Liste von Draw-Call-Batches aus. Es berührt niemals Ihre GPU direkt. Die Draw-Call-Batches sind einigermaßen optimal und Sie können sie später in Ihrer App oder sogar aus der Ferne rendern.
Auf der Seite „Releases“ finden Sie dekorierte Änderungsprotokolle. Das Lesen der Änderungsprotokolle ist eine gute Möglichkeit, über die Angebote von Dear ImGui auf dem Laufenden zu bleiben, und gibt Ihnen möglicherweise Anregungen für einige Funktionen, die Sie bisher ignoriert haben!
Durch Aufrufen der Funktion ImGui::ShowDemoWindow()
wird ein Demofenster erstellt, das eine Vielzahl von Funktionen und Beispielen präsentiert. Der Code steht jederzeit als Referenz in imgui_demo.cpp
zur Verfügung. So sieht die Demo aus.
Sie sollten in der Lage sein, die Beispiele aus Quellen zu erstellen. Wenn nicht, lassen Sie es uns wissen! Wenn Sie einen kurzen Blick auf einige Funktionen von Dear ImGui werfen möchten, können Sie hier Windows-Binärdateien der Demo-App herunterladen:
Die Demoanwendungen sind nicht DPI-fähig, daher ist auf einem 4K-Bildschirm mit einer gewissen Unschärfe zu rechnen. Für DPI-Bewusstsein in Ihrer Anwendung können Sie Ihre Schriftart in einem anderen Maßstab laden/neu laden und Ihren Stil mit style.ScaleAllSizes()
skalieren (siehe FAQ).
Weitere Informationen finden Sie im Leitfaden „Erste Schritte“.
Auf den meisten Plattformen und bei Verwendung von C++ sollten Sie in der Lage sein, eine Kombination der imgui_impl_xxxx-Backends ohne Modifikation zu verwenden (z. B. imgui_impl_win32.cpp
+ imgui_impl_dx11.cpp
). Wenn Ihre Engine mehrere Plattformen unterstützt, sollten Sie erwägen, mehr imgui_impl_xxxx-Dateien zu verwenden, anstatt sie neu zu schreiben: Das wird für Sie weniger Arbeit bedeuten und Sie können Dear ImGui sofort zum Laufen bringen. Sie können später entscheiden, ein benutzerdefiniertes Backend mit Ihren benutzerdefinierten Engine-Funktionen neu zu schreiben, wenn Sie dies wünschen.
Um Dear ImGui in Ihre benutzerdefinierte Engine zu integrieren, müssen Sie 1) Maus-/Tastatur-/Gamepad-Eingänge verkabeln, 2) eine Textur auf Ihre GPU/Render-Engine hochladen und 3) eine Renderfunktion bereitstellen, die Texturen binden und texturierte Dreiecke rendern kann, was im Wesentlichen der Fall ist Backends tun es. Der Ordner „examples/“ ist mit Anwendungen gefüllt, die genau das tun: ein Fenster einrichten und Backends verwenden. Wenn Sie der Anleitung „Erste Schritte“ folgen, sollte die Integration von Dear ImGui theoretisch weniger als eine Stunde dauern. Nehmen Sie sich unbedingt die Zeit, die FAQ, Kommentare und Anwendungsbeispiele zu lesen!
Offiziell gepflegte Backends/Bindungen (im Repository):
Wiki-Seite für Backends/Bindungen von Drittanbietern:
Nützliche Wiki-Seite zu Erweiterungen/Widgets:
Weitere Links und Ideen finden Sie auch im Wiki.
Beispielprojekte mit Dear ImGui: Tracy (Profiler), ImHex (Hex-Editor/Datenanalyse), RemedyBG (Debugger) und Hunderte andere.
Weitere von Benutzern eingereichte Screenshots von Projekten mit Dear ImGui finden Sie in den Galerie-Threads!
Eine Liste der Widgets und Erweiterungen von Drittanbietern finden Sie auf der Wiki-Seite „Nützliche Erweiterungen/Widgets“.
Benutzerdefinierte Engine erhe (Docking-Zweig) | Benutzerdefinierte Engine für Wonder Boy: The Dragon's Trap (2017) |
Benutzerdefinierte Engine (ohne Titel) | Tracy Profiler (github) |
Siehe: Häufig gestellte Fragen (FAQ), wo häufig gestellte Fragen beantwortet werden.
Siehe: Erste Schritte und Wiki für viele Links, Referenzen und Artikel.
Siehe: Artikel über das IMGUI-Paradigma zum Lesen/Lernen über das Immediate-Mode-GUI-Paradigma.
Siehe: Bevorstehende Änderungen.
Siehe: Dear ImGui Test Engine + Test Suite für Automatisierung und Tests.
Damit Suchmaschinen das Wiki crawlen können, finden Sie hier einen Link zum Crawlable Wiki (nicht für Menschen, hier erfahren Sie den Grund).
Erste Schritte? Für Erstbenutzer, die Probleme beim Kompilieren/Verknüpfen/Ausführen oder beim Laden von Schriftarten haben, nutzen Sie bitte GitHub-Diskussionen. Bei allen anderen Fragen, Fehlerberichten, Wünschen und Rückmeldungen posten Sie bitte auf GitHub Issues. Bitte lesen und füllen Sie die Vorlage für neue Ausgaben sorgfältig durch.
Für zahlende Geschäftskunden steht ein privater Support zur Verfügung (E-Mail: contact @ Dearimgui dot com ).
Welche Version soll ich bekommen?
Wir kennzeichnen gelegentlich Releases (mit netten Versionshinweisen), aber es ist im Allgemeinen sicher und wird empfohlen, mit dem neuesten master
oder docking
-Zweig zu synchronisieren. Die Bibliothek ist ziemlich stabil und Regressionen werden in der Regel schnell behoben, wenn sie gemeldet werden. Fortgeschrittene Benutzer möchten möglicherweise den docking
Zweig mit Multi-Viewport- und Docking-Funktionen verwenden. Dieser Zweig wird regelmäßig mit dem Master synchronisiert.
Wer nutzt Dear ImGui?
Eine Vorstellung davon, wer Dear ImGui verwendet, finden Sie auf den Wiki-Seiten „Angebote, Finanzierung & Sponsoren“ und „Software, die Dear ImGui verwendet“. Bitte fügen Sie Ihr Spiel/Ihre Software hinzu, wenn Sie können! Sehen Sie sich auch die Galerie-Threads an!
Wie kann ich helfen?
Laufend Die Entwicklung von Dear ImGui wird und wurde von Benutzern und privaten Sponsoren finanziell unterstützt.
Weitere Informationen finden Sie in der detaillierten Liste der aktuellen und früheren Unterstützer und Sponsoren von Dear ImGui .
Von November 2014 bis Dezember 2019 wurde die Weiterentwicklung auch finanziell von den Nutzern auf Patreon und durch Einzelspenden unterstützt.
DANKE an alle früheren und gegenwärtigen Unterstützer, die dazu beigetragen haben, dieses Projekt am Leben und Gedeihen zu erhalten!
Dear ImGui nutzt kostenlos bereitgestellte Software und Dienste für Open-Source-Projekte:
Entwickelt von Omar Cornut und allen direkten oder indirekten Mitwirkenden am GitHub. Die frühe Version dieser Bibliothek wurde mit Unterstützung von Media Molecule entwickelt und erstmals intern im Spiel Tearaway (PS Vita) verwendet.
Zu den wiederkehrenden Mitwirkenden gehört Rokas Kupstys @rokups (2020-2022): Ein großer Teil der Arbeit an Automatisierungssystemen und Regressionstests ist jetzt in Dear ImGui Test Engine verfügbar.
Wartungs-/Supportverträge, Sponsoringrechnungen und andere B2B-Transaktionen werden von Disco Hello gehostet und abgewickelt.
Omar: „Ich habe das IMGUI-Paradigma zum ersten Mal bei Q-Games entdeckt, wo Atman Binstock seine eigene einfache Implementierung in die Codebasis eingefügt hatte, die ich einige Zeit damit verbrachte, sie zu verbessern und darüber nachzudenken. Es stellte sich heraus, dass Atman durch die Arbeit direkt mit dem Konzept in Berührung kam.“ Als ich zu Media Molecule wechselte, habe ich versucht, die Mängel und Einschränkungen der ersten zu überwinden, mit der ich gearbeitet habe. Seitdem habe ich unverhältnismäßig viel Zeit darauf verwendet iterieren und verbessern.“
Integriert die Schriftart ProggyClean.ttf von Tristan Grimmer (MIT-Lizenz).
Integriert stb_textedit.h, stb_truetype.h, stb_rect_pack.h von Sean Barrett (gemeinfrei).
Inspiration, Feedback und Tests für frühe Versionen: Casey Muratori, Atman Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov, Matt Willis. Vielen Dank auch an alle, die Feedback, Fragen und Patches auf GitHub posten.
Dear ImGui ist unter der MIT-Lizenz lizenziert. Weitere Informationen finden Sie in LICENSE.txt.