From 3afca98bbb4f17a899081dc714b6f0e90c74d658 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Sat, 14 Mar 2026 13:53:08 +0100 Subject: [PATCH] [godot] Update to new Sequence API - Use sequence.resolveIndex(pose) to get current frame index - Use sequence.getOffsets(index) for RegionAttachment computeWorldVertices - Use sequence.getRegion(index) for texture lookup - Use sequence.getUVs(index) for UV data --- spine-godot/spine_godot/SpineSprite.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/spine-godot/spine_godot/SpineSprite.cpp b/spine-godot/spine_godot/SpineSprite.cpp index ad537e971..bfb66d05f 100644 --- a/spine-godot/spine_godot/SpineSprite.cpp +++ b/spine-godot/spine_godot/SpineSprite.cpp @@ -873,11 +873,13 @@ void SpineSprite::update_meshes(Ref skeleton_ref) { if (attachment->getRTTI().isExactly(spine::RegionAttachment::rtti)) { auto region = (spine::RegionAttachment *) attachment; + auto &sequence = region->getSequence(); + int sequenceIndex = sequence.resolveIndex(slot->getAppliedPose()); vertices->setSize(8, 0); - region->computeWorldVertices(*slot, *vertices, 0); - renderer_object = (SpineRendererObject *) ((spine::AtlasRegion *) region->getRegion())->getPage()->texture; - uvs = ®ion->getUVs(); + region->computeWorldVertices(*slot, sequence.getOffsets(sequenceIndex).buffer(), vertices->buffer(), 0); + renderer_object = (SpineRendererObject *) ((spine::AtlasRegion *) sequence.getRegion(sequenceIndex))->getPage()->texture; + uvs = &sequence.getUVs(sequenceIndex); indices = &statics.quad_indices; auto &attachment_color = region->getColor(); @@ -887,12 +889,14 @@ void SpineSprite::update_meshes(Ref skeleton_ref) { tint.a *= attachment_color.a; } else if (attachment->getRTTI().isExactly(spine::MeshAttachment::rtti)) { auto mesh = (spine::MeshAttachment *) attachment; + auto &sequence = mesh->getSequence(); + int sequenceIndex = sequence.resolveIndex(slot->getAppliedPose()); vertices->setSize(mesh->getWorldVerticesLength(), 0); mesh->computeWorldVertices(*skeleton, *slot, 0, mesh->getWorldVerticesLength(), vertices->buffer(), 0, 2); - renderer_object = (SpineRendererObject *) ((spine::AtlasRegion *) mesh->getRegion())->getPage()->texture; - uvs = &mesh->getUVs(); + renderer_object = (SpineRendererObject *) ((spine::AtlasRegion *) sequence.getRegion(sequenceIndex))->getPage()->texture; + uvs = &sequence.getUVs(sequenceIndex); indices = &mesh->getTriangles(); auto &attachment_color = mesh->getColor(); @@ -1058,9 +1062,11 @@ void SpineSprite::draw() { if (!attachment) continue; if (!attachment->getRTTI().isExactly(spine::RegionAttachment::rtti)) continue; auto region = (spine::RegionAttachment *) attachment; + auto &sequence = region->getSequence(); + int sequenceIndex = sequence.resolveIndex(slot->getAppliedPose()); auto vertices = &statics.scratch_vertices; vertices->setSize(8, 0); - region->computeWorldVertices(*slot, *vertices, 0); + region->computeWorldVertices(*slot, sequence.getOffsets(sequenceIndex).buffer(), vertices->buffer(), 0); // Render triangles. createLinesFromMesh(statics.scratch_points, statics.quad_indices, vertices);