Просмотр исходного кода

Add driver types to GD extension initialisation levels

Bastiaan Olij 4 лет назад
Родитель
Сommit
f9849a2717

+ 2 - 0
core/extension/gdnative_interface.h

@@ -449,6 +449,8 @@ typedef enum {
 	GDNATIVE_INITIALIZATION_SERVERS,
 	GDNATIVE_INITIALIZATION_SCENE,
 	GDNATIVE_INITIALIZATION_EDITOR,
+	GDNATIVE_INITIALIZATION_DRIVER,
+	GDNATIVE_MAX_INITIALIZATION_LEVEL,
 } GDNativeInitializationLevel;
 
 typedef struct {

+ 1 - 0
core/extension/native_extension.h

@@ -70,6 +70,7 @@ public:
 		INITIALIZATION_LEVEL_SERVERS,
 		INITIALIZATION_LEVEL_SCENE,
 		INITIALIZATION_LEVEL_EDITOR,
+		INITIALIZATION_LEVEL_DRIVER,
 	};
 
 	bool is_library_open() const;

+ 3 - 0
drivers/register_driver_types.cpp

@@ -30,6 +30,7 @@
 
 #include "register_driver_types.h"
 
+#include "core/extension/native_extension_manager.h"
 #include "drivers/png/image_loader_png.h"
 #include "drivers/png/resource_saver_png.h"
 
@@ -54,7 +55,9 @@ void unregister_core_driver_types() {
 }
 
 void register_driver_types() {
+	NativeExtensionManager::get_singleton()->initialize_extensions(NativeExtension::INITIALIZATION_LEVEL_DRIVER);
 }
 
 void unregister_driver_types() {
+	NativeExtensionManager::get_singleton()->deinitialize_extensions(NativeExtension::INITIALIZATION_LEVEL_DRIVER);
 }

+ 6 - 5
main/main.cpp

@@ -2669,18 +2669,19 @@ void Main::cleanup(bool p_force) {
 	//clear global shader variables before scene and other graphics stuff are deinitialized.
 	rendering_server->global_variables_clear();
 
-#ifdef TOOLS_ENABLED
-	EditorNode::unregister_editor_types();
-#endif
-
 	if (xr_server) {
 		// cleanup now before we pull the rug from underneath...
 		memdelete(xr_server);
 	}
 
+	unregister_driver_types();
+
+#ifdef TOOLS_ENABLED
+	EditorNode::unregister_editor_types();
+#endif
+
 	ImageLoader::cleanup();
 
-	unregister_driver_types();
 	unregister_module_types();
 	unregister_platform_apis();
 	unregister_scene_types();