cimgui
Il s'agit d'un mince wrapper c-api généré par programme pour l'excellente interface graphique en mode immédiat C++ Cher ImGui. Toutes les fonctions imgui.h sont encapsulées par programme. Les fichiers générés sont : cimgui.cpp
, cimgui.h
pour la compilation C. Également pour aider à la création de liaisons, definitions.lua
avec les informations de définition de fonction et structs_and_enums.lua
. Cette bibliothèque est conçue comme une couche intermédiaire pour pouvoir utiliser Dear ImGui à partir d'autres langages pouvant s'interfacer avec C (comme D - voir D-binding)
Histoire:
Initialement, cimgui a été développé par Stephan Dilly sous forme de code écrit à la main, mais a récemment été transformé en une version générée automatiquement par sonoro1234 afin de suivre plus facilement imgui (permettant à l'utilisateur de sélectionner la branche souhaitée et de s'engager).
Remarques :
- actuellement, ce wrapper est basé sur la version [1.91.4 de Dear ImGui avec API interne]
- seules les fonctions, structures et énumérations de imgui.h (éventuellement un imgui_internal.h) sont encapsulées.
- si vous êtes intéressé par les backends imgui, vous devriez consulter le projet LuaJIT-ImGui.
- Tous les noms sont algorithmiques, à l'exception des noms codés dans la table cimgui_overloads (https://github.com/cimgui/cimgui/blob/master/generator/generator.lua#L60). Dans la version officielle, ce tableau est vide.
- Les noms des fonctions surchargées actuelles peuvent être trouvés dans (https://github.com/cimgui/cimgui/blob/master/generator/output/overloads.txt)
compilation
utiliser un générateur
- ceci n'est nécessaire (avant compilation) que si vous souhaitez une version imgui différente de celle fournie, sinon la génération est déjà faite.
- vous aurez besoin de LuaJIT (https://github.com/LuaJIT/LuaJIT.git meilleure branche 2.1) ou précompilé pour Linux/macOS/windows dans https://luapower.com/luajit/download
- vous devez également utiliser un compilateur C++ pour effectuer le prétraitement : gcc (dans les builds Windows MinGW-W64 par exemple), clang ou cl (MSVC). (ce dépôt a été réalisé avec gcc)
- mettez à jour le dossier
imgui
vers la version souhaitée. - éditez
generator/generator.bat
sous Windows, ou generator/generator.sh
sous Linux, pour choisir entre gcc, clang ou cl et pour choisir les backends souhaités et si imgui_internal est généré ou non, les commentaires sont générés ou non et si les constructeurs sont générés également avec des versions effectuant simplement l'initialisation des structures fournies par vous-même (_Construct est ajouté aux noms des constructeurs) - les valeurs par défaut du générateur sont gcc comme compilateur, imgui_internal inclus et sdl, glfw, vulkan, opengl2 et opengl3 comme backends.
- modifiez config_generator.lua pour ajouter les inclusions nécessaires aux backends que vous avez choisis (vulkan en a besoin).
- Exécutez Generator.bat ou Generator.sh avec gcc, clang ou cl et LuaJIT sur votre PATH.
- en conséquence, certains fichiers sont générés :
cimgui.cpp
, cimgui.h
et cimgui_impl.h
pour la compilation et certains fichiers lua/json avec des informations sur la liaison : definitions.json
avec des informations sur la fonction, structs_and_enums.json
avec des informations sur la structure et l'énumération, impl_definitions.json
avec les fonctions des informations backends. - Vous pouvez transmettre les indicateurs du compilateur à Generator.sh ou Generator.bat en les modifiant à la fin de l'appel pour spécifier davantage le comportement du compilateur. (par exemple -DIMGUI_USER_CONFIG)
- Vous pouvez transmettre n'importe quel argument supplémentaire à generator.sh (.bat) dans la ligne de commande.
- Si vous utilisez des options différentes de celles du dépôt cimgui et si vous souhaitez les conserver après une mise à jour de cimgui, vous pouvez les conserver dans une copie de Generator.sh (.bat) en dehors du dossier cimgui où
cd cimgui/generator
est utilisé avant l'appel de Luajit. . Voir #232 (commentaire)
générer une liaison
- L'interface C est exposée par cimgui.h lorsque vous définissez CIMGUI_DEFINE_ENUMS_AND_STRUCTS
- avec votre langue préférée, vous pouvez utiliser les fichiers lua ou json générés comme dans :
- https://github.com/sonoro1234/LuaJIT-ImGui/blob/master/lua/build.bat (avec génération de code Lua dans https://github.com/sonoro1234/LuaJIT-ImGui/blob/master/lua/class_gen .lua)
- https://github.com/mellinoe/ImGui.NET/tree/autogen/src/CodeGenerator
définitions description
- C'est une collection dans laquelle key est le nom cimgui qui résulterait sans surcharges et la valeur est un tableau de surcharges (peut être une seule surcharge)
- Chaque surcharge est une collection. Certaines clés et valeurs pertinentes sont :
- stname : le nom de la structure à laquelle appartient la fonction (sera "" s'il s'agit du niveau supérieur dans l'espace de noms ImGui)
- ov_cimguiname : le nom cimgui surchargé (s'il est absent, il serait extrait de cimguiname)
- cimguiname : le nom sans surcharge (à utiliser s'il n'y a pas ov_cimguiname)
- ret : le type de retour
- retref : est défini si le type de retour d'origine est une référence. (sera un pointeur dans cimgui)
- argsT : un tableau de collections (chacune avec type : type d'argument et name : le nom de l'argument, lorsque l'argument est un pointeur de fonction également ret : type de retour et signature : la signature de la fonction)
- args : une chaîne d'argsT concaténés et séparés par des virgules
- call_args : une chaîne avec les noms d'arguments séparés par des virgules pour appeler la fonction imgui
- defaults : une collection dans laquelle key est le nom de l'argument et value est la valeur par défaut.
- manual : sera vrai si cette fonction est écrite à la main (non générée)
- skipped : sera vrai si cette fonction n'est pas générée (et non écrite à la main)
- isvararg : est défini si un argument est un vararg
- constructor : est défini si la fonction est un constructeur pour une classe.
- destructor : est défini si la fonction est un destructeur pour une classe mais pas seulement un destructeur par défaut.
- realdestructor : est défini si la fonction est un destructeur pour une classe
- templated : est défini si la fonction appartient à une classe basée sur un modèle (ImVector)
- templatedgen : est défini si la fonction appartient à une structure générée à partir d'un modèle (ImVector_ImWchar)
- nonUDT : si elle est présente, la fonction d'origine renvoyait un type défini par l'utilisateur afin que la signature ait été modifiée pour accepter un pointeur vers l'UDT comme premier argument.
- location : nom du fichier d'en-tête et numéro de ligne d'où provient cette fonction. (imgui:000, interne:123, imgui_impl_xxx:123)
- is_static_function : est défini lorsqu'il s'agit d'une fonction statique struct.
Description des structs_and_enums
- Il s'agit d'une collection composée de trois éléments :
- sous les énumérations de clés, nous obtenons la collection d'énumérations dans laquelle chaque clé est le nom de la balise enum et la valeur est un tableau de valeurs ordonnées représentées comme une collection avec des clés
- name : le nom de cette valeur enum
- valeur : la chaîne C
- calc_value : la valeur numérique correspondant à value
- sous key structs, nous obtenons la collection structs dans laquelle la clé est le nom de la structure et la valeur est un tableau des membres de la structure. Chacun étant donné en collection avec clés
- type : le type du membre de la structure
- template_type : si le type a un argument de modèle (comme ImVector), ce sera ici
- name : le nom du membre de la structure
- size : le nombre d'éléments du tableau (lorsqu'il s'agit d'un tableau)
- bitfield : la largeur du champ de bits (dans le cas où il s'agit d'un champ de bits)
- sous les emplacements clés, nous obtenons la collection d'emplacements dans laquelle chaque clé est le nom de la balise enum ou le nom de la structure et la valeur est le nom du fichier d'en-tête et le numéro de ligne dont il provient.
usage
- utilisez la méthode qui se trouve dans l'espace de noms ImGui c++ dans l'imgui.h d'origine en ajoutant
ig
au début - les méthodes ont la même liste de paramètres et renvoient des valeurs (si possible)
- les fonctions qui appartiennent à une structure ont un premier argument supplémentaire avec un pointeur vers la structure.
- où une fonction renvoie UDT (type défini par l'utilisateur) par valeur, certains compilateurs se plaignent donc la fonction est générée en acceptant un pointeur vers le type UDT comme premier argument (ou deuxième si appartient à une structure).
utilisation avec les backends
- regardez le dossier backend_test pour la construction d'un module cmake avec SDL et opengl3, glfw et opengl3, SDL et Vulkan
- lire Comment les backends cimgui peuvent-ils être utilisés
exemple de liaisons basées sur cimgui
- LuaJIT-ImGui
- ImGui.NET
- nimgl/imgui
- kotlin-imgui
- CImGui.jl
- odin-imgui
- AbandonnéImgui
- BindBC-CimGui
- imgui-rs
- imgui-pas
- cristal-imgui
Exemples C basés sur cimgui
- sdl2_opengl3
- sdl2-cimgui-démo
- cimgui_c_sdl2_example
- cimgui-c-exemple avec GLFW
- raylib-cimgui