mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-20 17:26:01 +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.
|
||||
// See: https://x.com/badlogicgames/status/1843661872404591068
|
||||
struct SpineSpriteStatics {
|
||||
private:
|
||||
static SpineSpriteStatics *_instance;
|
||||
|
||||
public:
|
||||
Ref<CanvasItemMaterial> default_materials[4] = {};
|
||||
int sprite_count;
|
||||
@ -126,11 +129,21 @@ public:
|
||||
}
|
||||
|
||||
static SpineSpriteStatics &instance() {
|
||||
static SpineSpriteStatics inst;
|
||||
return inst;
|
||||
if (!_instance) {
|
||||
_instance = new SpineSpriteStatics();
|
||||
}
|
||||
return *_instance;
|
||||
}
|
||||
|
||||
static void clear() {
|
||||
if (_instance) {
|
||||
delete _instance;
|
||||
}
|
||||
_instance = nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
SpineSpriteStatics *SpineSpriteStatics::_instance = nullptr;
|
||||
|
||||
static void
|
||||
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);
|
||||
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());
|
||||
num_vertices = vertices.size();
|
||||
num_indices = indices.size();
|
||||
vertex_buffer = surface["vertex_data"];
|
||||
attribute_buffer = surface["attribute_data"];
|
||||
num_vertices = vertices.size();
|
||||
num_indices = indices.size();
|
||||
indices_changed = false;
|
||||
} else {
|
||||
AABB aabb_new;
|
||||
@ -394,6 +407,10 @@ void SpineMesh2D::update_mesh(const Vector<Point2> &vertices,
|
||||
}
|
||||
#endif
|
||||
|
||||
void SpineSprite::clear_statics() {
|
||||
SpineSpriteStatics::clear();
|
||||
}
|
||||
|
||||
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("get_skeleton_data_res"), &SpineSprite::get_skeleton_data_res);
|
||||
|
||||
@ -297,4 +297,6 @@ public:
|
||||
virtual bool _edit_use_rect() const;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static void clear_statics();
|
||||
};
|
||||
|
||||
@ -195,7 +195,10 @@ void register_spine_godot_types() {
|
||||
|
||||
#if VERSION_MAJOR > 3
|
||||
void uninitialize_spine_godot_module(ModuleInitializationLevel level) {
|
||||
return;
|
||||
if (level == MODULE_INITIALIZATION_LEVEL_SCENE) {
|
||||
SpineSprite::clear_statics();
|
||||
return;
|
||||
}
|
||||
if (level != MODULE_INITIALIZATION_LEVEL_CORE) return;
|
||||
#else
|
||||
void unregister_spine_godot_types() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user