|
@@ -47,8 +47,9 @@ void *token = nullptr;
|
|
|
|
|
|
} // namespace internal
|
|
} // namespace internal
|
|
|
|
|
|
-GDExtensionBinding::Callback GDExtensionBinding::init_callbacks[GDNATIVE_MAX_INITIALIZATION_LEVEL] = {};
|
|
|
|
-GDExtensionBinding::Callback GDExtensionBinding::terminate_callbacks[GDNATIVE_MAX_INITIALIZATION_LEVEL] = {};
|
|
|
|
|
|
+GDExtensionBinding::Callback GDExtensionBinding::init_callback = nullptr;
|
|
|
|
+GDExtensionBinding::Callback GDExtensionBinding::terminate_callback = nullptr;
|
|
|
|
+GDNativeInitializationLevel GDExtensionBinding::minimum_initialization_level = GDNATIVE_INITIALIZATION_CORE;
|
|
|
|
|
|
GDNativeBool GDExtensionBinding::init(const GDNativeInterface *p_interface, const GDNativeExtensionClassLibraryPtr p_library, GDNativeInitialization *r_initialization) {
|
|
GDNativeBool GDExtensionBinding::init(const GDNativeInterface *p_interface, const GDNativeExtensionClassLibraryPtr p_library, GDNativeInitialization *r_initialization) {
|
|
internal::gdn_interface = p_interface;
|
|
internal::gdn_interface = p_interface;
|
|
@@ -57,15 +58,9 @@ GDNativeBool GDExtensionBinding::init(const GDNativeInterface *p_interface, cons
|
|
|
|
|
|
r_initialization->initialize = initialize_level;
|
|
r_initialization->initialize = initialize_level;
|
|
r_initialization->deinitialize = deinitialize_level;
|
|
r_initialization->deinitialize = deinitialize_level;
|
|
|
|
+ r_initialization->minimum_initialization_level = minimum_initialization_level;
|
|
|
|
|
|
- bool has_init = false;
|
|
|
|
- for (int i = 0; i < GDNATIVE_MAX_INITIALIZATION_LEVEL; i++) {
|
|
|
|
- if (init_callbacks[i]) {
|
|
|
|
- r_initialization->minimum_initialization_level = GDNativeInitializationLevel(i);
|
|
|
|
- has_init = true;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- ERR_FAIL_COND_V_MSG(!has_init, false, "At least one initialization callback must be defined.");
|
|
|
|
|
|
+ ERR_FAIL_COND_V_MSG(init_callback == nullptr, false, "Initialization callback must be defined.");
|
|
|
|
|
|
Variant::init_bindings();
|
|
Variant::init_bindings();
|
|
|
|
|
|
@@ -75,8 +70,8 @@ GDNativeBool GDExtensionBinding::init(const GDNativeInterface *p_interface, cons
|
|
void GDExtensionBinding::initialize_level(void *userdata, GDNativeInitializationLevel p_level) {
|
|
void GDExtensionBinding::initialize_level(void *userdata, GDNativeInitializationLevel p_level) {
|
|
ClassDB::current_level = p_level;
|
|
ClassDB::current_level = p_level;
|
|
|
|
|
|
- if (init_callbacks[p_level]) {
|
|
|
|
- init_callbacks[p_level]();
|
|
|
|
|
|
+ if (init_callback) {
|
|
|
|
+ init_callback(static_cast<ModuleInitializationLevel>(p_level));
|
|
}
|
|
}
|
|
|
|
|
|
ClassDB::initialize(p_level);
|
|
ClassDB::initialize(p_level);
|
|
@@ -86,49 +81,21 @@ void GDExtensionBinding::deinitialize_level(void *userdata, GDNativeInitializati
|
|
ClassDB::current_level = p_level;
|
|
ClassDB::current_level = p_level;
|
|
ClassDB::deinitialize(p_level);
|
|
ClassDB::deinitialize(p_level);
|
|
|
|
|
|
- if (terminate_callbacks[p_level]) {
|
|
|
|
- terminate_callbacks[p_level]();
|
|
|
|
|
|
+ if (terminate_callback) {
|
|
|
|
+ terminate_callback(static_cast<ModuleInitializationLevel>(p_level));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-void GDExtensionBinding::InitObject::register_core_initializer(Callback p_core_init) const {
|
|
|
|
- GDExtensionBinding::init_callbacks[GDNATIVE_INITIALIZATION_CORE] = p_core_init;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void GDExtensionBinding::InitObject::register_server_initializer(Callback p_server_init) const {
|
|
|
|
- GDExtensionBinding::init_callbacks[GDNATIVE_INITIALIZATION_SERVERS] = p_server_init;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void GDExtensionBinding::InitObject::register_scene_initializer(Callback p_scene_init) const {
|
|
|
|
- GDExtensionBinding::init_callbacks[GDNATIVE_INITIALIZATION_SCENE] = p_scene_init;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void GDExtensionBinding::InitObject::register_driver_initializer(Callback p_driver_init) const {
|
|
|
|
- GDExtensionBinding::init_callbacks[GDNATIVE_INITIALIZATION_DRIVER] = p_driver_init;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void GDExtensionBinding::InitObject::register_editor_initializer(Callback p_editor_init) const {
|
|
|
|
- GDExtensionBinding::init_callbacks[GDNATIVE_INITIALIZATION_EDITOR] = p_editor_init;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void GDExtensionBinding::InitObject::register_core_terminator(Callback p_core_terminate) const {
|
|
|
|
- GDExtensionBinding::terminate_callbacks[GDNATIVE_INITIALIZATION_CORE] = p_core_terminate;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void GDExtensionBinding::InitObject::register_server_terminator(Callback p_server_terminate) const {
|
|
|
|
- GDExtensionBinding::terminate_callbacks[GDNATIVE_INITIALIZATION_SERVERS] = p_server_terminate;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void GDExtensionBinding::InitObject::register_scene_terminator(Callback p_scene_terminate) const {
|
|
|
|
- GDExtensionBinding::terminate_callbacks[GDNATIVE_INITIALIZATION_SCENE] = p_scene_terminate;
|
|
|
|
|
|
+void GDExtensionBinding::InitObject::register_initializer(Callback p_init) const {
|
|
|
|
+ GDExtensionBinding::init_callback = p_init;
|
|
}
|
|
}
|
|
|
|
|
|
-void GDExtensionBinding::InitObject::register_driver_terminator(Callback p_driver_terminate) const {
|
|
|
|
- GDExtensionBinding::terminate_callbacks[GDNATIVE_INITIALIZATION_DRIVER] = p_driver_terminate;
|
|
|
|
|
|
+void GDExtensionBinding::InitObject::register_terminator(Callback p_terminate) const {
|
|
|
|
+ GDExtensionBinding::terminate_callback = p_terminate;
|
|
}
|
|
}
|
|
|
|
|
|
-void GDExtensionBinding::InitObject::register_editor_terminator(Callback p_editor_terminate) const {
|
|
|
|
- GDExtensionBinding::terminate_callbacks[GDNATIVE_INITIALIZATION_EDITOR] = p_editor_terminate;
|
|
|
|
|
|
+void GDExtensionBinding::InitObject::set_minimum_library_initialization_level(ModuleInitializationLevel p_level) const {
|
|
|
|
+ GDExtensionBinding::minimum_initialization_level = static_cast<GDNativeInitializationLevel>(p_level);
|
|
}
|
|
}
|
|
|
|
|
|
GDNativeBool GDExtensionBinding::InitObject::init() const {
|
|
GDNativeBool GDExtensionBinding::InitObject::init() const {
|