Qu'est-ce que Dear ImGui et quelles sont ses caractéristiques ?
Dear ImGui est un projet à code source ouvert développé à l'origine par le Français Omar Cornut, développeur et programmeur de jeux vidéo et cofondateur de la société de développement de jeux vidéo Lizardcube. Le projet est maintenant sponsorisé par de grandes entreprises, dont Google, Blizzard, Nvidia et le français Ubisoft. Ce dernier est devenu un sponsor du projet en décembre dernier, après avoir rejoint le Blender Foundation Development Fund en tant que membre Gold (30 000 €/an). Le code source de Dear ImGui est partagé via GitHub sous licence MIT.
Il s'agit en effet d'une implémentation possible du paradigme IMGUI (Immediate Mode GUI). Le paradigme IMGUI peut sembler à première vue inhabituel pour certains utilisateurs, cela est principalement dû au fait que les interfaces graphiques en "mode conservé" ont été si répandues et prédominantes. Une autre implémentation, également très connue, du paradigme IMGUI est la bibliothèque de widgets IMGUI développée par Unity, souvent appelée de manière informelle OnGUI(), qui est utilisée pour alimenter l'éditeur Unity et ses extensions.
Cette bibliothèque n'est pas liée à Dear ImGui (la base de code, la conception, les caractéristiques et les équipes sont différentes). La bibliothèque IMGUI utilisée par Unity a reçu dans le passé des réactions mitigées de ses utilisateurs, probablement parce qu'elle a été perçue comme un candidat potentiel pour des solutions d'interface utilisateur orientées jeu, dans lesquelles elle n'excelle pas. Toutefois, Unity a depuis fourni des bibliothèques séparées pour traiter ce cas, et sa bibliothèque IMGUI est toujours très utilisée par l'éditeur Unity et a été son épine dorsale pour l'interface utilisateur lors des 12 dernières années.
Le noyau de Dear ImGui est autonome et se compose de quelques fichiers indépendants de la plateforme que vous pouvez facilement compiler dans votre application/moteur. Il s'agit de tous les fichiers du dossier racine du dépôt (imgui.cpp, imgui.h, imgui_demo.cpp, imgui_draw.cpp, etc.). En outre, aucun processus de construction spécifique n'est requis, vous pouvez ajouter les fichiers .cpp à votre projet existant. En revanche, vous aurez besoin d'un backend pour intégrer Dear ImGui dans votre application.
Le backend transmet à Dear ImGui les entrées souris/clavier/gamepad et divers paramètres, et est chargé de rendre les effets de vertex résultants. Des backends pour une variété d'API graphiques et de plateformes de rendu sont fournis dans le dossier backends/, avec des exemples d'applications dans le dossier examples/. Vous pouvez également créer votre propre backend. Partout où vous pouvez utiliser des triangles texturés, vous pouvez utiliser Dear ImGui. Une fois que Dear ImGui est installé dans votre application, vous pouvez l'utiliser à partir de n'importe où dans votre boucle de programme.
Qu'est-il possible de faire avec la bibliothèque Dear ImGui ?
Dear ImGui est conçue 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). À cet effet, elle privilégie la simplicité et la productivité. Par conséquent, il lui manque certaines fonctionnalités que l'on trouve normalement dans les bibliothèques de haut niveau.
Selon ces développeurs, Dear ImGui vous permet de créer des outils élaborés ainsi que des outils de très courte durée. À l'extrême de la courte durée de vie : en utilisant la fonction 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. Dear ImGui n'est pas seulement pour ajuster des valeurs.
Vous pouvez également l'utiliser pour tracer un algorithme en cours d'exécution en émettant simplement des commandes textuelles. En outre, il est possible de l'utiliser en même temps que ses propres données de réflexion pour parcourir un ensemble de données en direct. De même, Dear ImGui peut être utile pour exposer les éléments internes d'un sous-système dans votre moteur, pour créer un logger, un outil d'inspection, un profileur, un débogueur, un éditeur/frame de jeu complet, etc.
En somme, Dear ImGui est particulièrement adaptée à l'intégration dans des moteurs de jeux (pour l'outillage), des applications 3D en temps réel, des applications plein écran, des applications embarquées, ou toute application sur des plateformes consoles où les caractéristiques du système d'exploitation ne sont pas standard.
Comment fonctionne la bibliothèque Dear ImGui ?
Comme mentionné plus haut, Dear ImGui est basée sur le paradigme IMGUI. Une bibliothèque IMGUI 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. Elle est moins sujette 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. Dear ImGui produit des tampons de vertex et des listes de commandes que vous pouvez facilement utiliser dans votre application.
Le nombre de draw calls (le nombre d'objets destinés à l'écran) et de changements d'état nécessaires pour les rendre est assez faible. Comme Dear ImGui ne connaît pas ou ne touche pas directement l'état des graphiques, 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). Vous pouvez cloner le dépôt et consultez les exemples d'applications dans le dossier examples/ pour savoir comment intégrer Dear ImGui à votre base de code existante.
Selon les développeurs de l'outil, une erreur courante est de confondre le mode "Immediate Mode GUI" avec le mode de rendu immédiat, ce qui implique généralement de marteler votre pilote/GPU avec un tas d'appels de dessin et de changements d'état inefficaces au fur et à mesure que les fonctions GUI sont appelées. Ils estiment que ce n'est pas ce que fait Dear ImGui. Dear ImGui produit des tampons de vertex et une petite liste de lots d'appels de dessin. Il ne touche jamais directement votre GPU.
Les lots d'appels sont décemment optimaux et vous pouvez les utiliser plus tard, dans votre application ou même à distance. Enfin, Dear ImGui utilise des logiciels et des services fournis gratuitement pour des projets open source, dont PVS-Studio pour l'analyse statique ; les actions GitHub pour les systèmes d'intégration continue ; et OpenCppCoverage pour l'analyse de la couverture du code.
Que disent les critiques sur la bibliothèque Dear ImGui ?
D'après certains commentaires, même si Dear ImGui représente un très bon outil, le paradigme IMGUI ne fonctionne pas partout. Selon eux, le problème du "déchirement de page" (à ne pas confondre avec vsync) signifie que vous devez, soit rendre des images en continu (au moins 2 images chaque fois que vous recevez une entrée), soit mettre en place une sorte de "suivi d'état en mode conservé" en plus d'ImGui. C'est bon pour les jeux, mais pour les applications où vous ne rendez pas de nouvelles images en permanence, le paradigme ne semble pas très adapté.
Cependant, d'autres estiment que l'implémentation de Dear ImGui est devenue beaucoup plus sophistiquée au fil des ans, et n'est plus une implémentation simpliste du concept d'interface graphique IMGUI. Elle possède désormais des identifiants uniques pour les widgets, son traitement de texte est devenu meilleur, etc. Par ailleurs, ces derniers suggèrent qu'il est possible de combiner une API de type ImGui avec un véritable arbre de widgets conservé afin de tirer le meilleur des deux mondes.
Source : Page GitHub du projet
Et vous ?
Que savez-vous du paradigme IMGUI ? Quels sont ses avantages et ses faiblesses ?
Connaissez-vous Dear ImGui ? Si oui, pour quel cas d'utilisation l'utilisez-vous ?
Voir aussi
Ubisoft sponsorise la bibliothèque d'interface utilisateur pour C++ « Dear ImGui », à la suite à son adhésion au Blender Development Fund pour soutenir l'animation open source
Ubisoft reporte la sortie de trois titres majeurs, y compris Watch Dogs Legion et Gods and Monsters et s'effondre en Bourse après l'annonce de profits en baisse pour l'exercice actuel
F8 : Facebook dévoile son EDI Nuclide, avec un SDK d'UI pour iOS et des outils de développement pour Android, tous disponibles en open source
Microsoft promeut le framework WinUI avec un nouveau site Web, qui énumère les avantages de la plateforme