Présentation

Godot, moteur open source sous licence MIT, est largement utilisé pour le développement 2D/3D. Bien que le langage natif GDScript soit suffisant pour la plupart des logiques de jeu, il ne permet pas d’appeler du code natif. Godot charge toutefois des extensions C++ grâce à GDExtension, et le paquet officiel godot-cpp fournit les bindings C++ qui exposent les classes du moteur aux développeurs.

Fonctionnement des extensions C++

Deux méthodes existent : les modules d‑engine, qui nécessitent de recompiler l’ensemble du moteur, et les GDExtensions, qui se limitent à charger une bibliothèque partagée (.dll, .so, .dylib ou .wasm) au moment de l’exécution. La seconde approche est recommandée car elle conserve un moteur « officiel » et permet de distribuer les plugins sous forme de fichiers binaires. Le C‑interface de GDExtension est verbeux ; godot-cpp le masque en proposant une classe C++ par classe du moteur (Node2D, Sprite2D, Input, …). Un nœud dérivé de ces classes se comporte comme un nœud natif dans l’éditeur :

#include <godot_cpp/classes/node2d.hpp>
namespace godot {
    class MyNode : public Node2D {
        GDCLASS(MyNode, Node2D)
    protected:
        static void _bind_methods() {}
    public:
        void _process(double p_delta) override {
            // runs every frame
        }
    };
}

Depuis la version 10.0, une même release de godot-cpp supporte toutes les versions de Godot à partir de 4.3. Le paramètre api_version (4.3‑4.7) détermine la génération des classes, et le paramètre target (template_debug, template_release, editor) indique le type de bibliothèque produit.

Gestion des dépendances avec Conan

Le principal obstacle réside dans la compilation de godot-cpp et de chaque bibliothèque tierce pour chaque plateforme cible (Windows, macOS, Linux, Web). Le dépôt officiel recommande d’ajouter godot-cpp comme sous‑module Git et de le compiler via SCons, ce qui entraîne une duplication du processus de build pour chaque projet. En publiant godot-cpp dans ConanCenter, il devient un paquet réutilisable : chaque combinaison api_version + target est construite une fois, puis partagée entre tous les projets. Conan gère également les plus de 1 900 bibliothèques disponibles, garantissant des flags de compilation cohérents et la création d’artefacts pour chaque architecture (x86, x86_64, ARM, …). Ainsi, l’extension GDExtension se comporte comme un projet C++ standard avec des dépendances déclarées dans un conanfile.txt ou conanfile.py.

Exemple pratique : simulation de 100 000 particules avec flecs

L’article illustre le workflow en créant un nœud Swarm qui utilise flecs, une bibliothèque ECS (Entity Component System) écrite en C/C++. Le code initialise 100 000 entités, chaque entité possède une position, une vélocité et une logique de fuite du curseur. La simulation s’exécute entièrement dans le module C++, puis les résultats sont rendus par Godot grâce aux méthodes de dessin standard. La performance atteint le temps réel même avec un tel nombre d’entités, démontrant que la chaîne Conan + godot-cpp évite les recompilations redondantes et assure une compatibilité multiplateforme. Le fichier .gdextension associe les tags debug et release aux bibliothèques libgdexample.template_debug.so ou .dll, ce qui permet à Godot de choisir la version adaptée à l’environnement d’exécution.