mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-21 09:46:02 +08:00
[godot] Fix statics deinitialization
This commit is contained in:
parent
62aad81999
commit
5600d0d7c7
@ -87,6 +87,9 @@
|
|||||||
// Needed due to shared lib initializers in GDExtension.
|
// Needed due to shared lib initializers in GDExtension.
|
||||||
// See: https://x.com/badlogicgames/status/1843661872404591068
|
// See: https://x.com/badlogicgames/status/1843661872404591068
|
||||||
struct SpineSpriteStatics {
|
struct SpineSpriteStatics {
|
||||||
|
private:
|
||||||
|
static SpineSpriteStatics *_instance;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Ref<CanvasItemMaterial> default_materials[4] = {};
|
Ref<CanvasItemMaterial> default_materials[4] = {};
|
||||||
int sprite_count;
|
int sprite_count;
|
||||||
@ -126,11 +129,21 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static SpineSpriteStatics &instance() {
|
static SpineSpriteStatics &instance() {
|
||||||
static SpineSpriteStatics inst;
|
if (!_instance) {
|
||||||
return inst;
|
_instance = new SpineSpriteStatics();
|
||||||
|
}
|
||||||
|
return *_instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void clear() {
|
||||||
|
if (_instance) {
|
||||||
|
delete _instance;
|
||||||
|
}
|
||||||
|
_instance = nullptr;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SpineSpriteStatics *SpineSpriteStatics::_instance = nullptr;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
clear_triangles(SpineMesh2D *mesh_instance) {
|
clear_triangles(SpineMesh2D *mesh_instance) {
|
||||||
@ -230,10 +243,10 @@ void SpineMesh2D::update_mesh(const PackedVector2Array &vertices,
|
|||||||
surface_offsets[RS::ARRAY_TEX_UV] = RS::get_singleton()->mesh_surface_get_format_offset(surface_format, vertices.size(), RS::ARRAY_TEX_UV);
|
surface_offsets[RS::ARRAY_TEX_UV] = RS::get_singleton()->mesh_surface_get_format_offset(surface_format, vertices.size(), RS::ARRAY_TEX_UV);
|
||||||
vertex_stride = RS::get_singleton()->mesh_surface_get_format_vertex_stride(surface_format, vertices.size());
|
vertex_stride = RS::get_singleton()->mesh_surface_get_format_vertex_stride(surface_format, vertices.size());
|
||||||
attribute_stride = RS::get_singleton()->mesh_surface_get_format_attribute_stride(surface_format, vertices.size());
|
attribute_stride = RS::get_singleton()->mesh_surface_get_format_attribute_stride(surface_format, vertices.size());
|
||||||
num_vertices = vertices.size();
|
|
||||||
num_indices = indices.size();
|
|
||||||
vertex_buffer = surface["vertex_data"];
|
vertex_buffer = surface["vertex_data"];
|
||||||
attribute_buffer = surface["attribute_data"];
|
attribute_buffer = surface["attribute_data"];
|
||||||
|
num_vertices = vertices.size();
|
||||||
|
num_indices = indices.size();
|
||||||
indices_changed = false;
|
indices_changed = false;
|
||||||
} else {
|
} else {
|
||||||
AABB aabb_new;
|
AABB aabb_new;
|
||||||
@ -394,6 +407,10 @@ void SpineMesh2D::update_mesh(const Vector<Point2> &vertices,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void SpineSprite::clear_statics() {
|
||||||
|
SpineSpriteStatics::clear();
|
||||||
|
}
|
||||||
|
|
||||||
void SpineSprite::_bind_methods() {
|
void SpineSprite::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_skeleton_data_res", "skeleton_data_res"), &SpineSprite::set_skeleton_data_res);
|
ClassDB::bind_method(D_METHOD("set_skeleton_data_res", "skeleton_data_res"), &SpineSprite::set_skeleton_data_res);
|
||||||
ClassDB::bind_method(D_METHOD("get_skeleton_data_res"), &SpineSprite::get_skeleton_data_res);
|
ClassDB::bind_method(D_METHOD("get_skeleton_data_res"), &SpineSprite::get_skeleton_data_res);
|
||||||
|
|||||||
@ -297,4 +297,6 @@ public:
|
|||||||
virtual bool _edit_use_rect() const;
|
virtual bool _edit_use_rect() const;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void clear_statics();
|
||||||
};
|
};
|
||||||
|
|||||||
@ -195,7 +195,10 @@ void register_spine_godot_types() {
|
|||||||
|
|
||||||
#if VERSION_MAJOR > 3
|
#if VERSION_MAJOR > 3
|
||||||
void uninitialize_spine_godot_module(ModuleInitializationLevel level) {
|
void uninitialize_spine_godot_module(ModuleInitializationLevel level) {
|
||||||
|
if (level == MODULE_INITIALIZATION_LEVEL_SCENE) {
|
||||||
|
SpineSprite::clear_statics();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if (level != MODULE_INITIALIZATION_LEVEL_CORE) return;
|
if (level != MODULE_INITIALIZATION_LEVEL_CORE) return;
|
||||||
#else
|
#else
|
||||||
void unregister_spine_godot_types() {
|
void unregister_spine_godot_types() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user