mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-06 07:14:55 +08:00
[godot] Fix GDExtension crash on editor shutdown
Properly remove import/inspector plugins in NOTIFICATION_PREDELETE before the extension is unloaded to prevent crash when Godot's ResourceFormatImporter tries to unreference already-destroyed plugins.
This commit is contained in:
parent
de8ae9ef6b
commit
e3f7e90912
@ -178,11 +178,24 @@ Error SpineBinaryResourceImportPlugin::import(const String &source_file, const S
|
||||
|
||||
#ifdef SPINE_GODOT_EXTENSION
|
||||
SpineEditorPlugin::SpineEditorPlugin() {
|
||||
add_import_plugin(memnew(SpineAtlasResourceImportPlugin));
|
||||
add_import_plugin(memnew(SpineJsonResourceImportPlugin));
|
||||
add_import_plugin(memnew(SpineBinaryResourceImportPlugin));
|
||||
add_inspector_plugin(memnew(SpineSkeletonDataResourceInspectorPlugin));
|
||||
// add_inspector_plugin(memnew(SpineSpriteInspectorPlugin));
|
||||
atlas_import_plugin = Ref<EditorImportPlugin>(memnew(SpineAtlasResourceImportPlugin));
|
||||
json_import_plugin = Ref<EditorImportPlugin>(memnew(SpineJsonResourceImportPlugin));
|
||||
binary_import_plugin = Ref<EditorImportPlugin>(memnew(SpineBinaryResourceImportPlugin));
|
||||
skeleton_data_inspector_plugin = Ref<EditorInspectorPlugin>(memnew(SpineSkeletonDataResourceInspectorPlugin));
|
||||
|
||||
add_import_plugin(atlas_import_plugin);
|
||||
add_import_plugin(json_import_plugin);
|
||||
add_import_plugin(binary_import_plugin);
|
||||
add_inspector_plugin(skeleton_data_inspector_plugin);
|
||||
}
|
||||
|
||||
void SpineEditorPlugin::_notification(int p_what) {
|
||||
if (p_what == NOTIFICATION_PREDELETE) {
|
||||
remove_import_plugin(atlas_import_plugin);
|
||||
remove_import_plugin(json_import_plugin);
|
||||
remove_import_plugin(binary_import_plugin);
|
||||
remove_inspector_plugin(skeleton_data_inspector_plugin);
|
||||
}
|
||||
}
|
||||
#else
|
||||
SpineEditorPlugin::SpineEditorPlugin(EditorNode *node) {
|
||||
|
||||
@ -287,11 +287,20 @@ class SpineEditorPlugin : public EditorPlugin {
|
||||
|
||||
static void _bind_methods() {}
|
||||
|
||||
#ifdef SPINE_GODOT_EXTENSION
|
||||
Ref<EditorImportPlugin> atlas_import_plugin;
|
||||
Ref<EditorImportPlugin> json_import_plugin;
|
||||
Ref<EditorImportPlugin> binary_import_plugin;
|
||||
Ref<EditorInspectorPlugin> skeleton_data_inspector_plugin;
|
||||
#endif
|
||||
|
||||
public:
|
||||
#ifdef SPINE_GODOT_EXTENSION
|
||||
explicit SpineEditorPlugin();
|
||||
|
||||
String _get_plugin_name() const override { return "SpineEditorPlugin"; }
|
||||
|
||||
void _notification(int p_what);
|
||||
#else
|
||||
explicit SpineEditorPlugin(EditorNode *node);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user