From 95f3a1fe17eddf4f4fed6dbede98d5302ea483a1 Mon Sep 17 00:00:00 2001 From: badlogic Date: Tue, 9 May 2017 15:00:34 +0200 Subject: [PATCH] [c] Fixed bug in Triangulator/SkeletonClipping regarding labeled gotos. Closes 895 --- spine-c/spine-c/src/spine/SkeletonClipping.c | 4 +++- spine-c/spine-c/src/spine/Triangulator.c | 2 +- spine-sfml/src/spine/spine-sfml.cpp | 1 + spine-ts/webgl/example/test.html | 4 ++-- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/spine-c/spine-c/src/spine/SkeletonClipping.c b/spine-c/spine-c/src/spine/SkeletonClipping.c index 04ca48ef5..8d2c7803c 100644 --- a/spine-c/spine-c/src/spine/SkeletonClipping.c +++ b/spine-c/spine-c/src/spine/SkeletonClipping.c @@ -219,8 +219,9 @@ void spSkeletonClipping_clipTriangles(spSkeletonClipping* self, float* vertices, spFloatArray_clear(clippedVertices); spFloatArray_clear(clippedUVs); spUnsignedShortArray_clear(clippedTriangles); + i = 0; outer: - for (i = 0; i < trianglesLength; i += 3) { + for (; i < trianglesLength; i += 3) { int p; int vertexOffset = triangles[i] * stride; float x2, y2, u2, v2, x3, y3, u3, v3; @@ -304,6 +305,7 @@ void spSkeletonClipping_clipTriangles(spSkeletonClipping* self, float* vertices, clippedTrianglesItems[s + 1] = (unsigned short)(index + 1); clippedTrianglesItems[s + 2] = (unsigned short)(index + 2); index += 3; + i += 3; goto outer; } } diff --git a/spine-c/spine-c/src/spine/Triangulator.c b/spine-c/spine-c/src/spine/Triangulator.c index c4dbde83d..c09976546 100644 --- a/spine-c/spine-c/src/spine/Triangulator.c +++ b/spine-c/spine-c/src/spine/Triangulator.c @@ -155,7 +155,6 @@ spShortArray* spTriangulator_triangulate(spTriangulator* self, spFloatArray* ver int previous = vertexCount - 1, i = 0, next = 1; int previousIndex, nextIndex; while (1) { - outer: if (!isConcave[i]) { int p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1; float p1x = vertices[p1], p1y = vertices[p1 + 1]; @@ -175,6 +174,7 @@ spShortArray* spTriangulator_triangulate(spTriangulator* self, spFloatArray* ver } break; } + outer: if (next == 0) { do { diff --git a/spine-sfml/src/spine/spine-sfml.cpp b/spine-sfml/src/spine/spine-sfml.cpp index 3655fc3be..9fe0ea975 100644 --- a/spine-sfml/src/spine/spine-sfml.cpp +++ b/spine-sfml/src/spine/spine-sfml.cpp @@ -135,6 +135,7 @@ void SkeletonDrawable::draw (RenderTarget& target, RenderStates states) const { } else if (attachment->type == SP_ATTACHMENT_CLIPPING) { spClippingAttachment* clip = (spClippingAttachment*)slot->attachment; spSkeletonClipping_clipStart(clipper, slot, clip); + continue; } else continue; Uint8 r = static_cast(skeleton->color.r * slot->color.r * attachmentColor->r * 255); diff --git a/spine-ts/webgl/example/test.html b/spine-ts/webgl/example/test.html index 2ab30f7cb..f1e9f4d64 100644 --- a/spine-ts/webgl/example/test.html +++ b/spine-ts/webgl/example/test.html @@ -43,7 +43,7 @@ function init() { assetManager.loadTexture(FILE + ".png"); assetManager.loadText(FILE + ".atlas"); - assetManager.loadText("raptor.json"); + assetManager.loadText(FILE + ".json"); timeKeeper = new spine.TimeKeeper(); requestAnimationFrame(load); @@ -58,7 +58,7 @@ function load() { var atlasLoader = new spine.AtlasAttachmentLoader(atlas); var skeletonJson = new spine.SkeletonJson(atlasLoader); skeletonJson.scale = SCALE; - var skeletonData = skeletonJson.readSkeletonData(JSON.parse(assetManager.get("raptor.json"))); + var skeletonData = skeletonJson.readSkeletonData(JSON.parse(assetManager.get(FILE + ".json"))); for (var i = 0; i < NUM_SKELETONS; i++) { skeleton = new spine.Skeleton(skeletonData);