Fix creation (and godot-side deletion) of extended objects.
Proper initialization for godot-cpp classes with memnew. Extension classes (i.e. the `GDCLASS` macro) behave differently from regular wrapped classes, and requires Godot to initialize them during object construction. This commit update the GDCLASS macro to not create/destroy the instance during the bindings callback, but during the extension callbacks. When setting the object instance, the bindings instance is set to the pointer of the extension instance so that it can later be retrieved normally via `object_get_instance_bindings`.
This commit is contained in:
committed by
Bastiaan Olij
parent
cc88df05e7
commit
b4632e317d
@@ -137,6 +137,7 @@ typedef void *GDNativeStringNamePtr;
|
||||
typedef void *GDNativeStringPtr;
|
||||
typedef void *GDNativeObjectPtr;
|
||||
typedef void *GDNativeTypePtr;
|
||||
typedef void *GDNativeExtensionPtr;
|
||||
typedef void *GDNativeMethodBindPtr;
|
||||
typedef int64_t GDNativeInt;
|
||||
typedef uint8_t GDNativeBool;
|
||||
@@ -428,7 +429,8 @@ typedef struct {
|
||||
|
||||
/* CLASSDB */
|
||||
|
||||
GDNativeClassConstructor (*classdb_get_constructor)(const char *p_classname);
|
||||
GDNativeClassConstructor (*classdb_get_constructor)(const char *p_classname, GDNativeExtensionPtr *r_extension);
|
||||
GDNativeObjectPtr (*classdb_construct_object)(GDNativeClassConstructor p_constructor, GDNativeExtensionPtr p_extension);
|
||||
GDNativeMethodBindPtr (*classdb_get_method_bind)(const char *p_classname, const char *p_methodname, GDNativeInt p_hash);
|
||||
void *(*classdb_get_class_tag)(const char *p_classname);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user