diff --git a/spine-godot/spine_godot/SpineSprite.cpp b/spine-godot/spine_godot/SpineSprite.cpp index 952742549..a9ed74fef 100644 --- a/spine-godot/spine_godot/SpineSprite.cpp +++ b/spine-godot/spine_godot/SpineSprite.cpp @@ -54,14 +54,6 @@ static spine::Vector quad_indices; static spine::Vector scratch_vertices; static Vector scratch_points; -static void clear_triangles(SpineMesh2D *mesh_instance) { -#if VERSION_MAJOR > 3 - RenderingServer::get_singleton()->canvas_item_clear(mesh_instance->get_canvas_item()); -#else - VisualServer::get_singleton()->canvas_item_clear(mesh_instance->get_canvas_item()); -#endif -} - static void add_triangles(SpineMesh2D *mesh_instance, const Vector &vertices, const Vector &uvs, @@ -568,7 +560,7 @@ void SpineSprite::update_meshes(Ref skeleton_ref) { spine::Attachment *attachment = slot->getAttachment(); SpineMesh2D *mesh_instance = mesh_instances[i]; mesh_instance->renderer_object = nullptr; - mesh_instance->set_light_mask(get_light_mask()); + if (!attachment) { skeleton_clipper->clipEnd(*slot); continue; @@ -636,7 +628,7 @@ void SpineSprite::update_meshes(Ref skeleton_ref) { } if (indices->size() > 0) { - // Set the mesh + mesh_instance->set_light_mask(get_light_mask()); size_t num_vertices = vertices->size() / 2; mesh_instance->vertices.resize((int) num_vertices); memcpy(mesh_instance->vertices.ptrw(), vertices->buffer(), num_vertices * 2 * sizeof(float)); diff --git a/spine-godot/spine_godot/SpineSprite.h b/spine-godot/spine_godot/SpineSprite.h index bec2d5ec8..842d8c19e 100644 --- a/spine-godot/spine_godot/SpineSprite.h +++ b/spine-godot/spine_godot/SpineSprite.h @@ -39,6 +39,8 @@ struct SpineRendererObject; class SpineSprite; +class Attachment; + class SpineMesh2D : public Node2D { GDCLASS(SpineMesh2D, Node2D); @@ -53,10 +55,16 @@ protected: Vector colors; Vector indices; SpineRendererObject *renderer_object; + int slotIndex; + Attachment *attachment; + ArrayMesh *mesh; public: - SpineMesh2D() : renderer_object(nullptr){}; - ~SpineMesh2D(){}; + SpineMesh2D() : renderer_object(nullptr), slotIndex(-1), attachment(nullptr), mesh(nullptr) {}; + ~SpineMesh2D(){ + if (mesh) memdelete(mesh); + }; + ArrayMesh *get_mesh() {return mesh;}; }; class SpineSprite : public Node2D,