(Cette bibliothèque est disponible sous une licence gratuite et permissive, mais a besoin d'un soutien financier pour soutenir ses améliorations continues. En plus de la maintenance et de la stabilité, de nombreuses fonctionnalités souhaitables doivent encore être ajoutées. Si votre entreprise utilise Dear ImGui, veuillez envisager de contacter .)
Entreprises : soutenir le développement et la maintenance continus via des contrats de sponsoring/support facturés :
E-mail : contact @ Dearimgui dot com
Particuliers : soutenez le développement et la maintenance continus ici. Voir également la page Financement.
Le pitch - Utilisation - Comment ça marche - Versions et journaux des modifications - Démo - Mise en route et intégration |
---|
Galerie - Support, FAQ - Comment aider - Financement & Sponsors - Crédits - Licence |
Wiki - Extensions - Liaisons de langages et backends de frameworks - Logiciels utilisant Dear ImGui - Citations d'utilisateurs |
Cher ImGui est une bibliothèque d'interface utilisateur graphique sans ballonnement pour C++ . Il génère des tampons de sommets optimisés que vous pouvez restituer à tout moment dans votre application compatible avec le pipeline 3D. Il est rapide, portable, indépendant du moteur de rendu et autonome (pas de dépendances externes).
Dear ImGui est conçu pour permettre des itérations rapides et pour permettre aux programmeurs de créer des outils de création de contenu et des outils de visualisation/débogage (par opposition à l'interface utilisateur pour l'utilisateur final moyen). Il privilégie la simplicité et la productivité pour atteindre cet objectif et manque de certaines fonctionnalités que l'on trouve couramment dans les bibliothèques de plus haut niveau. Entre autres choses, l'internationalisation complète (texte de droite à gauche, texte bidirectionnel, mise en forme du texte, etc.) et les fonctionnalités d'accessibilité ne sont pas prises en charge.
Dear ImGui est particulièrement adapté à l'intégration dans les moteurs de jeu (pour les outils), les applications 3D en temps réel, les applications plein écran, les applications embarquées ou toute application sur les plates-formes de console où les fonctionnalités du système d'exploitation ne sont pas standard.
Le cœur de Dear ImGui est autonome dans quelques fichiers indépendants de la plate-forme que vous pouvez facilement compiler dans votre application/moteur. Ce sont tous les fichiers du dossier racine du référentiel (imgui*.cpp, imgui*.h). Aucun processus de construction spécifique n'est requis . Vous pouvez ajouter les fichiers .cpp dans votre projet existant.
Les backends pour une variété d'API graphiques et de plates-formes de rendu sont fournis dans le dossier backends/, ainsi que des exemples d'applications dans le dossier examples/. Vous pouvez également créer votre propre backend. Partout où vous pouvez restituer des triangles texturés, vous pouvez restituer Dear ImGui.
Consultez la section Mise en route et intégration de ce document pour plus de détails.
Une fois Dear ImGui configuré dans votre application, vous pouvez l'utiliser depuis _n'importe où_ dans votre boucle de programme :
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 ();
Cher ImGui vous permet de créer des outils élaborés ainsi que des outils de très courte durée. Du côté extrême de la courte durée de vie : en utilisant la fonctionnalité Edit&Continue (rechargement de code à chaud) des compilateurs modernes, vous pouvez ajouter quelques widgets pour modifier les variables pendant que votre application est en cours d'exécution, et supprimer le code une minute plus tard ! Cher ImGui ne sert pas uniquement à modifier les valeurs. Vous pouvez l'utiliser pour tracer un algorithme en cours d'exécution en émettant simplement des commandes de texte. Vous pouvez l'utiliser avec vos propres données de réflexion pour parcourir votre ensemble de données en direct. Vous pouvez l'utiliser pour exposer les composants internes d'un sous-système dans votre moteur, pour créer un enregistreur, un outil d'inspection, un profileur, un débogueur, un éditeur/framework de création de jeu complet, etc.
Le paradigme IMGUI, via son API, tente de minimiser la duplication d'état superflue, la synchronisation d'état et la rétention d'état du point de vue de l'utilisateur. Il est moins sujet aux erreurs (moins de code et moins de bogues) que les interfaces traditionnelles en mode conservé et se prête à la création d'interfaces utilisateur dynamiques. Consultez la section À propos du paradigme IMGUI du Wiki pour plus de détails.
Cher ImGui génère des tampons de sommets et des listes de commandes que vous pouvez facilement restituer dans votre application. Le nombre d'appels de tirage et de changements d'état requis pour les exécuter est assez faible. Parce que Dear ImGui ne connaît pas et ne touche pas directement l'état graphique, vous pouvez appeler ses fonctions n'importe où dans votre code (par exemple au milieu d'un algorithme en cours d'exécution ou au milieu de votre propre processus de rendu). Reportez-vous aux exemples d'applications dans le dossier examples/ pour obtenir des instructions sur la façon d'intégrer Dear ImGui à votre base de code existante.
Un malentendu courant est de confondre l'interface graphique en mode immédiat avec le rendu en mode immédiat, ce qui implique généralement de marteler votre pilote/GPU avec un tas d'appels de dessin inefficaces et de changements d'état lorsque les fonctions de l'interface graphique sont appelées. Ce n'est PAS ce que fait Dear ImGui. Cher ImGui génère des tampons de sommets et une petite liste de lots d'appels de tirage. Il ne touche jamais directement votre GPU. Les lots d'appels de tirage sont décemment optimaux et vous pouvez les restituer plus tard, dans votre application ou même à distance.
Voir la page des versions pour les journaux des modifications décorés. La lecture des journaux de modifications est un bon moyen de se tenir au courant de ce que Dear ImGui a à offrir, et vous donnera peut-être une idée de certaines fonctionnalités que vous avez ignorées jusqu'à présent !
L’appel de la fonction ImGui::ShowDemoWindow()
créera une fenêtre de démonstration présentant une variété de fonctionnalités et d’exemples. Le code est toujours disponible pour référence dans imgui_demo.cpp
. Voici à quoi ressemble la démo.
Vous devriez être capable de construire les exemples à partir de sources. Si ce n'est pas le cas, faites-le-nous savoir ! Si vous souhaitez avoir un aperçu rapide de certaines fonctionnalités de Dear ImGui, vous pouvez télécharger les binaires Windows de l'application de démonstration ici :
Les applications de démonstration ne prennent pas en charge le DPI, alors attendez-vous à un certain flou sur un écran 4K. Pour la prise en compte du DPI dans votre application, vous pouvez charger/recharger votre police à une échelle différente et mettre à l'échelle votre style avec style.ScaleAllSizes()
(voir FAQ).
Consultez le guide de démarrage pour plus de détails.
Sur la plupart des plates-formes et lorsque vous utilisez C++, vous devriez pouvoir utiliser une combinaison des backends imgui_impl_xxxx sans modification (par exemple imgui_impl_win32.cpp
+ imgui_impl_dx11.cpp
). Si votre moteur prend en charge plusieurs plates-formes, envisagez d'utiliser davantage de fichiers imgui_impl_xxxx au lieu de les réécrire : cela vous demandera moins de travail et vous pourrez faire fonctionner Dear ImGui immédiatement. Vous pourrez ultérieurement décider de réécrire un backend personnalisé en utilisant les fonctions de votre moteur personnalisé si vous le souhaitez.
L'intégration de Dear ImGui dans votre moteur personnalisé consiste à 1) câbler les entrées souris/clavier/manette de jeu 2) télécharger une texture sur votre GPU/moteur de rendu 3) fournir une fonction de rendu qui peut lier des textures et restituer des triangles texturés, ce qui est essentiellement ce que Les backends fonctionnent. Le dossier examples/ est rempli d'applications qui font exactement cela : configurer une fenêtre et utiliser des backends. Si vous suivez le guide de démarrage, l'intégration de Dear ImGui devrait en théorie vous prendre moins d'une heure. Assurez-vous de passer du temps à lire la FAQ, les commentaires et les exemples d'applications !
Backends/liaisons officiellement maintenus (dans le référentiel) :
Page wiki des backends/liaisons tiers :
Page wiki Extensions/Widgets utiles :
Voir également Wiki pour plus de liens et d'idées.
Exemples de projets utilisant Dear ImGui : Tracy (profileur), ImHex (éditeur hexadécimal/analyse de données), RemedyBG (débogueur) et des centaines d'autres.
Pour plus de captures d'écran soumises par les utilisateurs de projets utilisant Dear ImGui, consultez les fils de discussion de la galerie !
Pour une liste des widgets et extensions tiers, consultez la page wiki Extensions/Widgets utiles.
Moteur personnalisé erhe (branche d'accueil) | Moteur personnalisé pour Wonder Boy : The Dragon's Trap (2017) |
Moteur personnalisé (sans titre) | Profileur Tracy (github) |
Voir : Foire aux questions (FAQ) où l'on répond aux questions courantes.
Voir : Mise en route et Wiki pour de nombreux liens, références et articles.
Voir : Articles sur le paradigme IMGUI pour lire/en savoir plus sur le paradigme GUI en mode immédiat.
Voir : Modifications à venir.
Voir : Cher moteur de test ImGui + suite de tests pour l'automatisation et les tests.
Dans le but d'amener les moteurs de recherche à explorer le wiki, voici un lien vers le Wiki Crawlable (pas pour les humains, voici pourquoi).
Commencer? Pour les nouveaux utilisateurs rencontrant des problèmes de compilation/liaison/exécution ou de chargement de polices, veuillez utiliser les discussions GitHub. Pour TOUTE autre question, rapport de bug, demande, commentaire, veuillez publier sur GitHub Issues. Veuillez lire et remplir attentivement le modèle de nouveau numéro.
Un support privé est disponible pour les clients professionnels payants (E-mail : contact @ dearimgui dot com ).
Quelle version dois-je obtenir ?
Nous marquons occasionnellement les versions (avec de belles notes de version), mais il est généralement sûr et recommandé de synchroniser avec la dernière branche master
ou docking
. La bibliothèque est assez stable et les régressions ont tendance à être corrigées rapidement lorsqu'elles sont signalées. Les utilisateurs avancés souhaiteront peut-être utiliser la branche docking
avec les fonctionnalités Multi-Viewport et Docking. Cette branche est régulièrement synchronisée avec le maître.
Qui utilise Cher ImGui ?
Consultez les pages Citations, Financement et sponsors et Logiciels utilisant Dear ImGui Wiki pour avoir une idée de qui utilise Dear ImGui. Veuillez ajouter votre jeu/logiciel si vous le pouvez ! Consultez également les discussions de la galerie !
Comment puis-je aider ?
Le développement en cours de Dear ImGui est et a été soutenu financièrement par les utilisateurs et les sponsors privés.
Veuillez consulter la liste détaillée des donateurs et sponsors actuels et passés de Dear ImGui pour plus de détails.
De novembre 2014 à décembre 2019, le développement en cours a également été soutenu financièrement par ses utilisateurs sur Patreon et par des dons individuels.
MERCI à tous les supporters passés et présents d'avoir contribué à maintenir ce projet vivant et prospère !
Cher ImGui utilise des logiciels et des services fournis gratuitement pour des projets open source :
Développé par Omar Cornut et tous les contributeurs directs ou indirects du GitHub. La première version de cette bibliothèque a été développée avec le soutien de Media Molecule et utilisée pour la première fois en interne sur le jeu Tearaway (PS Vita).
Les contributeurs récurrents incluent Rokas Kupstys @rokups (2020-2022) : une bonne partie du travail sur le système d'automatisation et les tests de régression désormais disponibles dans Dear ImGui Test Engine.
Les contrats de maintenance/support, les factures de sponsoring et autres transactions B2B sont hébergés et gérés par Disco Hello.
Omar : "J'ai découvert le paradigme IMGUI pour la première fois chez Q-Games, où Atman Binstock avait abandonné sa propre implémentation simple dans la base de code, que j'ai passé pas mal de temps à améliorer et à réfléchir. Il s'est avéré qu'Atman a été exposé directement au concept en travaillant avec Casey. Lorsque j'ai rejoint Media Molecule, j'ai réécrit une nouvelle bibliothèque en essayant de surmonter les défauts et les limites de la première avec laquelle j'ai travaillé. Elle est devenue cette bibliothèque et depuis lors, j'ai passé un temps déraisonnable à itérer. et l'améliorer."
Incorpore la police ProggyClean.ttf de Tristan Grimmer (licence MIT).
Incorpore stb_textedit.h, stb_truetype.h, stb_rect_pack.h par Sean Barrett (domaine public).
Inspiration, commentaires et tests pour les premières versions : Casey Muratori, Atman Binstock, Mikko Mononen, Emmanuel Briney, Stefan Kamoda, Anton Mikhailov, Matt Willis. Merci également à tous ceux qui publient des commentaires, des questions et des correctifs sur GitHub.
Dear ImGui est sous licence MIT, voir LICENSE.txt pour plus d'informations.