diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2021-06-25 23:29:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-25 23:29:30 +0200 |
commit | 56dafe916468f0c18e8ac77516c349e3dd8f93cb (patch) | |
tree | 176b9bb1217200cafec3613df6cf8369dcd73dd4 /core/object/class_db.cpp | |
parent | c8444c3ee078e33c33287cf879aa5daecb962a80 (diff) | |
parent | b1d15c51bc1ded928b266ffc06459dd8b2046eb4 (diff) |
Merge pull request #49744 from reduz/implement-native-extensions
Implement native extension system
Diffstat (limited to 'core/object/class_db.cpp')
-rw-r--r-- | core/object/class_db.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/core/object/class_db.cpp b/core/object/class_db.cpp index df36587662..a10405dfae 100644 --- a/core/object/class_db.cpp +++ b/core/object/class_db.cpp @@ -503,9 +503,9 @@ void ClassDB::add_compatibility_class(const StringName &p_class, const StringNam thread_local bool initializing_with_extension = false; thread_local ObjectNativeExtension *initializing_extension = nullptr; -thread_local void *initializing_extension_instance = nullptr; +thread_local GDExtensionClassInstancePtr initializing_extension_instance = nullptr; -void ClassDB::instance_get_native_extension_data(ObjectNativeExtension **r_extension, void **r_extension_instance) { +void ClassDB::instance_get_native_extension_data(ObjectNativeExtension **r_extension, GDExtensionClassInstancePtr *r_extension_instance) { if (initializing_with_extension) { *r_extension = initializing_extension; *r_extension_instance = initializing_extension_instance; @@ -539,7 +539,7 @@ Object *ClassDB::instantiate(const StringName &p_class) { if (ti->native_extension) { initializing_with_extension = true; initializing_extension = ti->native_extension; - initializing_extension_instance = ti->native_extension->create_instance(ti->native_extension->create_instance_userdata); + initializing_extension_instance = ti->native_extension->create_instance(ti->native_extension->class_userdata); } return ti->creation_func(); } @@ -1603,6 +1603,11 @@ void ClassDB::register_extension_class(ObjectNativeExtension *p_extension) { classes[p_extension->class_name] = c; } +void ClassDB::unregister_extension_class(const StringName &p_class) { + ERR_FAIL_COND(!classes.has(p_class)); + classes.erase(p_class); +} + RWLock ClassDB::lock; void ClassDB::cleanup_defaults() { |