11# godot-cpp
22
3- C++ bindings for the Godot extension API.
3+ This repository contains the * C++ bindings* for the [ ** Godot Engine ** ] ( https://github.com/godotengine/godot ) 's GDExtensions API.
44
5- ** Note: this is a work in progress for the extension system included in Godot 4.0**
5+ - [ ** Versioning** ] ( #versioning )
6+ - [ ** Contributing** ] ( #contributing )
7+ - [ ** Getting Started** ] ( #getting-started )
8+ - [ ** Included Example** ] ( #included-example )
69
7- ## Stub
10+ ## Versioning
811
9- Both this whole bindings system and this document are still work in progress and
10- thus it is still incomplete. It will be improved once the extension API is settled.
12+ This repositories follows the same branch versioning as the main [ Godot Engine
13+ repository ] ( https://github.com/godotengine/godot ) :
1114
12- ## How to use
15+ - ` master ` tracks the current development branch.
16+ - ` 3.x ` tracks the development of the next 3.x minor release.
17+ - Other versioned branches (e.g. ` 3.3 ` , ` 3.2 ` ) track the latest stable release
18+ in the corresponding branch.
1319
14- It's a bit similar to what it was for 3.x but also a bit different.
20+ Stable releases are also tagged on this repository:
21+ [ ** Tags** ] ( https://github.com/godotengine/godot-cpp/tags ) .
22+
23+ ** For any project built against a stable release of Godot, we recommend using
24+ this repository as a Git submodule, checking out the specific tag matching your
25+ Godot version.**
26+
27+ > As the ` master ` and ` 3.x ` branches are constantly getting updates, if you are
28+ > using ` godot-cpp ` against a more current version of Godot, see the instructions
29+ > in [ ** godot-headers** ] ( https://github.com/godotengine/godot-headers ) for
30+ > updating the relevant files.
31+
32+ ## Contributing
33+
34+ We greatly appreciate help in maintaining and extending this project. If you
35+ wish to help out, ensure you have an account on GitHub and create a "fork" of
36+ this repository. Rémi "Akien" Verschelde wrote an excellent bit of documentation
37+ for the main Godot project on this:
38+ [ Pull request workflow] ( https://docs.godotengine.org/en/stable/community/contributing/pr_workflow.html )
39+
40+ Please install clang-format and copy the files in ` misc/hooks ` into ` .git/hooks `
41+ so formatting is done before your changes are submitted.
42+
43+ ## Getting Started
44+
45+ It's a bit similar to what it was for 3.x but also a bit different. This new approach is much more akin to how core Godot modules are structured.
1546
1647Compiling this repository generates a static library to be linked with your shared lib,
1748just like before.
1849
19- To use the shared lib in your Godot project you'll need a ` .gdextension ` file, which replaces what was the ` .gdnlib ` before. Follow the example:
50+ To use the shared lib in your Godot project you'll need a ` .gdextension ` file, which replaces what was the ` .gdnlib ` before. Follow the example:
2051
2152``` ini
2253[configuration]
@@ -25,21 +56,24 @@ entry_symbol = "example_library_init"
2556
2657[libraries]
2758
28- Linux.64 = " bin/x11/libgdexample.so"
59+ linux.64 = " bin/x11/libgdexample.so"
60+ windows.64 = " bin/win64/libgdexample.dll"
2961```
3062
3163The ` entry_symbol ` is the name of the function that initializes your library. It should be similar to following layout:
3264
3365``` cpp
3466extern "C" {
67+
68+ // Initialization.
69+
3570GDNativeBool GDN_EXPORT example_library_init (const GDNativeInterface * p_interface, const GDNativeExtensionClassLibraryPtr p_library, GDNativeInitialization * r_initialization) {
36- GDNativeBool result = godot::GDExtensionBinding::init (p_interface, p_library, r_initialization);
71+ godot::GDExtensionBinding::InitObject init_obj (p_interface, p_library, r_initialization);
3772
38- if (result) {
39- register_example_types();
40- }
73+ init_obj.register_scene_initializer(register_example_types);
74+ init_obj.register_scene_terminator(unregister_example_types);
4175
42- return result ;
76+ return init_obj.init() ;
4377}
4478}
4579```
@@ -53,22 +87,8 @@ void register_example_types() {
5387}
5488```
5589
56- Extension registering has not yet been added to the Godot editor, so to make it recognize your extension you need to add the following section to your ` project.godot ` :
57-
58- ``` ini
59- [native_extensions]
60-
61- paths =[" res://example.gdextension" ]
62- ```
63-
6490Any node and resource you register will be available in the corresponding ` Create... ` dialog. Any class will be available to scripting as well.
6591
66- ## Example
92+ ## Included Example
6793
6894Check the project in the ` test ` folder for an example on how to use and register different things.
69-
70- This project isn't yet made to run in CI.
71-
72- ## Issues
73-
74- This really needs to be tested and very likely has things missing that weren't noticed yet. Use at your own risk (and contribute back with reports and fixes if you can).
0 commit comments