Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Chroniqueur Actualités

    Dear ImGui : une bibliothèque d'interface utilisateur graphique "bloat-free" pour C++
    Dear ImGui : une bibliothèque d'interface utilisateur graphique "bloat-free" pour C++,
    qui génère des tampons de vertex optimisés compatibles avec le pipeline 3D

    Dear ImGui est une bibliothèque d'interface utilisateur graphique "bloat-free" pour C++. Elle produit des tampons de vertex optimisés que vous pouvez utiliser à tout moment dans votre application compatible avec le pipeline 3D. Elle est rapide, portable, agnostique et autonome, car elle ne nécessite pas de dépendances externes. Voici ci-dessous quelques notions sur cette bibliothèque d'interface utilisateur graphique légère.

    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
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  2. #2

  3. #3
    Rédacteur/Modérateur

    On l'utilise énormément, ce truc a vraiment révolutionné les possibilités.
    Désormais, nous pouvons fournir des debug UI aisément pour configurer des bouts internes et non disponibles dans l'API publique, ce qui libère de l'utilisation de friend ou de devoir polluer l'interface publique.
    Nous pouvons aussi créer des debugs UI rapidement avant que la team UI implémente la UI finale dans le jeu. Très pratique pour faire des Proof Of Concept, prototypes ou essais rapides.
    Vraiment game changer et un must have selon moi ! D'autant plus que l'intégration est plutôt simple.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre habitué
    Comment insérer un .gif ?
    Bonjour,

    Je connais bien Dear ImGui pour avoir posté plusieurs articles (d'autres sont en préparation), et je pense que cette API a vraiment plein de qualités.

    Un peu hors sujet, j'aimerais savoir comment tu as inséré le .gif ?

    Dans cet article Fade In / Fade Out pour les fenêtres sous Dear ImGui, je n'ai jamais réussi à faire vivre le mien ? Est-ce possible de me donner la recette en privé ?

    Pour les curieux, c'est celui-ci le bon .gif : Animation Fade In / Fade Out

    Merci d'avance :-)

###raw>template_hook.ano_emploi###