From 7a861dc6054048b5fb7bff5629c22675d4f54f38 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Mon, 13 Feb 2023 06:49:56 +0100 Subject: [PATCH 1/2] [godot] Preparation work for mesh-based rendering. --- spine-godot/spine_godot/SpineSprite.cpp | 12 ++---------- spine-godot/spine_godot/SpineSprite.h | 12 ++++++++++-- 2 files changed, 12 insertions(+), 12 deletions(-) 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, From d9fff16b5f3560e4bddbe8c840e1d87e136ffc1d Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Mon, 13 Feb 2023 07:42:06 +0100 Subject: [PATCH 2/2] [godot] Closes #2243, custom resource types returned incorrect values from get_resource_type(). --- spine-godot/spine_godot/SpineAtlasResource.cpp | 2 +- spine-godot/spine_godot/SpineSkeletonFileResource.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spine-godot/spine_godot/SpineAtlasResource.cpp b/spine-godot/spine_godot/SpineAtlasResource.cpp index 5665c0306..4a178f03c 100644 --- a/spine-godot/spine_godot/SpineAtlasResource.cpp +++ b/spine-godot/spine_godot/SpineAtlasResource.cpp @@ -247,7 +247,7 @@ void SpineAtlasResourceFormatLoader::get_recognized_extensions(List *ext } String SpineAtlasResourceFormatLoader::get_resource_type(const String &path) const { - return "SpineAtlasResource"; + return path.ends_with("spatlas") || path.ends_with(".atlas") ? "SpineAtlasResource" : ""; } bool SpineAtlasResourceFormatLoader::handles_type(const String &type) const { diff --git a/spine-godot/spine_godot/SpineSkeletonFileResource.cpp b/spine-godot/spine_godot/SpineSkeletonFileResource.cpp index 07308c9b1..17b99c442 100644 --- a/spine-godot/spine_godot/SpineSkeletonFileResource.cpp +++ b/spine-godot/spine_godot/SpineSkeletonFileResource.cpp @@ -174,7 +174,7 @@ void SpineSkeletonFileResourceFormatLoader::get_recognized_extensions(List