Update readme to include new info

pull/602/head
Bastiaan Olij 2021-09-27 21:41:56 +10:00
parent 68ebc9b2a8
commit 92d25bcda6
1 changed files with 49 additions and 29 deletions

View File

@ -1,22 +1,53 @@
# godot-cpp # godot-cpp
C++ bindings for the Godot extension API. This repository contains the *C++ bindings* for the [**Godot Engine**](https://github.com/godotengine/godot)'s GDExtensions API.
**Note: this is a work in progress for the extension system included in Godot 4.0** - [**Versioning**](#versioning)
- [**Contributing**](#contributing)
- [**Getting Started**](#getting-started)
- [**Included Example**](#included-example)
## Stub ## Versioning
Both this whole bindings system and this document are still work in progress and This repositories follows the same branch versioning as the main [Godot Engine
thus it is still incomplete. It will be improved once the extension API is settled. repository](https://github.com/godotengine/godot):
## How to use - `master` tracks the current development branch.
- `3.x` tracks the development of the next 3.x minor release.
- Other versioned branches (e.g. `3.3`, `3.2`) track the latest stable release
in the corresponding branch.
It's a bit similar to what it was for 3.x but also a bit different. Stable releases are also tagged on this repository:
[**Tags**](https://github.com/godotengine/godot-cpp/tags).
**For any project built against a stable release of Godot, we recommend using
this repository as a Git submodule, checking out the specific tag matching your
Godot version.**
> As the `master` and `3.x` branches are constantly getting updates, if you are
> using `godot-cpp` against a more current version of Godot, see the instructions
> in [**godot-headers**](https://github.com/godotengine/godot-headers) for
> updating the relevant files.
## Contributing
We greatly appreciate help in maintaining and extending this project. If you
wish to help out, ensure you have an account on GitHub and create a "fork" of
this repository. Rémi "Akien" Verschelde wrote an excellent bit of documentation
for the main Godot project on this:
[Pull request workflow](https://docs.godotengine.org/en/stable/community/contributing/pr_workflow.html)
Please install clang-format and copy the files in `misc/hooks` into `.git/hooks`
so formatting is done before your changes are submitted.
## Getting Started
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.
Compiling this repository generates a static library to be linked with your shared lib, Compiling this repository generates a static library to be linked with your shared lib,
just like before. just like before.
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: 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:
```ini ```ini
[configuration] [configuration]
@ -25,21 +56,24 @@ entry_symbol = "example_library_init"
[libraries] [libraries]
Linux.64 = "bin/x11/libgdexample.so" linux.64 = "bin/x11/libgdexample.so"
windows.64 = "bin/win64/libgdexample.dll"
``` ```
The `entry_symbol` is the name of the function that initializes your library. It should be similar to following layout: The `entry_symbol` is the name of the function that initializes your library. It should be similar to following layout:
```cpp ```cpp
extern "C" { extern "C" {
// Initialization.
GDNativeBool GDN_EXPORT example_library_init(const GDNativeInterface *p_interface, const GDNativeExtensionClassLibraryPtr p_library, GDNativeInitialization *r_initialization) { GDNativeBool GDN_EXPORT example_library_init(const GDNativeInterface *p_interface, const GDNativeExtensionClassLibraryPtr p_library, GDNativeInitialization *r_initialization) {
GDNativeBool result = godot::GDExtensionBinding::init(p_interface, p_library, r_initialization); godot::GDExtensionBinding::InitObject init_obj(p_interface, p_library, r_initialization);
if (result) { init_obj.register_scene_initializer(register_example_types);
register_example_types(); init_obj.register_scene_terminator(unregister_example_types);
}
return result; return init_obj.init();
} }
} }
``` ```
@ -53,22 +87,8 @@ void register_example_types() {
} }
``` ```
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`:
```ini
[native_extensions]
paths=["res://example.gdextension"]
```
Any node and resource you register will be available in the corresponding `Create...` dialog. Any class will be available to scripting as well. Any node and resource you register will be available in the corresponding `Create...` dialog. Any class will be available to scripting as well.
## Example ## Included Example
Check the project in the `test` folder for an example on how to use and register different things. Check the project in the `test` folder for an example on how to use and register different things.
This project isn't yet made to run in CI.
## Issues
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).