About godot-cpp
godot-cpp are the official C++ GDExtension bindings, maintained as part of the Godot project.
godot-cpp is built with the GDExtension system, which allows access to Godot in almost the same way as modules: A lot of engine code can be used in your godot-cpp project almost exactly as it is.
In particular, godot-cpp has access to all functions that GDScript and C# have, and additional access to a few more for fast low-level access of data, or deeper integration with Godot.
Differences between godot-cpp and C++ modules
You can use both godot-cpp and C++ modules to run C or C++ code in a Godot project.
Beide ermöglichen es Ihnen auch, Bibliotheken von Drittanbietern in Godot zu integrieren. Welche Sie wählen sollten, hängt von Ihren Bedürfnissen ab.
Advantages of godot-cpp
Unlike modules, godot-cpp (and GDExtensions, in general) don't require compiling the engine's source code, making it easier to distribute your work. It gives you access to most of the API available to GDScript and C#, allowing you to code game logic with full control regarding performance. It's ideal if you need high-performance code you'd like to distribute as an add-on in the asset library.
Außerdem:
You can use the same compiled godot-cpp library in the editor and exported project. With C++ modules, you have to recompile all the export templates you plan to use if you require its functionality at runtime.
godot-cpp only requires you to compile your library, not the whole engine. That's unlike C++ modules, which are statically compiled into the engine. Every time you change a module, you need to recompile the engine. Even with incremental builds, this process is slower than using godot-cpp.
Vorteile von C++-Modulen
We recommend C++ modules in cases where godot-cpp (or another GDExtension system) isn't enough:
C++-Module bieten eine tiefere Integration in die Engine. Der Zugriff von GDExtension ist nicht so tief wie bei statischen Modulen.
Sie können C++-Module verwenden, um zusätzliche Funktionen in einem Projekt bereitzustellen, ohne native Bibliotheksdateien mit sich herumtragen zu müssen. Dies gilt auch für exportierte Projekte.
Bemerkung
If you notice that specific systems are not accessible via godot-cpp but are via custom modules, feel free to open an issue on the godot-cpp repository to discuss implementation options for exposing the missing functionality.
Versionskompatibilität
GDExtensions targeting an earlier version of Godot should work in later minor versions, but not vice-versa. For example, a GDExtension targeting Godot 4.2 should work just fine in Godot 4.3, but one targeting Godot 4.3 won't work in Godot 4.2.
For this reason, when creating GDExtensions, you may want to target the lowest version of Godot that has the features you need, not the most recent version of Godot. This can save you from needing to create multiple builds for different versions of Godot.
There is one exception to this: extensions targeting Godot 4.0 will not work with Godot 4.1 and later (see Aktualisieren Ihrer GDExtension für 4.1).
GDExtensions are also only compatible with engine builds that use the same
level of floating-point precision the extension was compiled for. This means
that if you use an engine build with double-precision floats, the extension must
also be compiled for double-precision floats and use an extension_api.json
file generated by your custom engine build. See Große-Welt-Koordinaten
for details.
Generally speaking, if you build a custom version of Godot, you should generate an
extension_api.json from it for your GDExtensions, because it may have some differences
from official Godot builds.