[c] Fixed bug in Triangulator/SkeletonClipping regarding labeled gotos. Closes 895

This commit is contained in:
badlogic 2017-05-09 15:00:34 +02:00
parent 4ee17864a2
commit 95f3a1fe17
4 changed files with 7 additions and 4 deletions

View File

@ -219,8 +219,9 @@ void spSkeletonClipping_clipTriangles(spSkeletonClipping* self, float* vertices,
spFloatArray_clear(clippedVertices); spFloatArray_clear(clippedVertices);
spFloatArray_clear(clippedUVs); spFloatArray_clear(clippedUVs);
spUnsignedShortArray_clear(clippedTriangles); spUnsignedShortArray_clear(clippedTriangles);
i = 0;
outer: outer:
for (i = 0; i < trianglesLength; i += 3) { for (; i < trianglesLength; i += 3) {
int p; int p;
int vertexOffset = triangles[i] * stride; int vertexOffset = triangles[i] * stride;
float x2, y2, u2, v2, x3, y3, u3, v3; 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 + 1] = (unsigned short)(index + 1);
clippedTrianglesItems[s + 2] = (unsigned short)(index + 2); clippedTrianglesItems[s + 2] = (unsigned short)(index + 2);
index += 3; index += 3;
i += 3;
goto outer; goto outer;
} }
} }

View File

@ -155,7 +155,6 @@ spShortArray* spTriangulator_triangulate(spTriangulator* self, spFloatArray* ver
int previous = vertexCount - 1, i = 0, next = 1; int previous = vertexCount - 1, i = 0, next = 1;
int previousIndex, nextIndex; int previousIndex, nextIndex;
while (1) { while (1) {
outer:
if (!isConcave[i]) { if (!isConcave[i]) {
int p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1; int p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1;
float p1x = vertices[p1], p1y = vertices[p1 + 1]; float p1x = vertices[p1], p1y = vertices[p1 + 1];
@ -175,6 +174,7 @@ spShortArray* spTriangulator_triangulate(spTriangulator* self, spFloatArray* ver
} }
break; break;
} }
outer:
if (next == 0) { if (next == 0) {
do { do {

View File

@ -135,6 +135,7 @@ void SkeletonDrawable::draw (RenderTarget& target, RenderStates states) const {
} else if (attachment->type == SP_ATTACHMENT_CLIPPING) { } else if (attachment->type == SP_ATTACHMENT_CLIPPING) {
spClippingAttachment* clip = (spClippingAttachment*)slot->attachment; spClippingAttachment* clip = (spClippingAttachment*)slot->attachment;
spSkeletonClipping_clipStart(clipper, slot, clip); spSkeletonClipping_clipStart(clipper, slot, clip);
continue;
} else continue; } else continue;
Uint8 r = static_cast<Uint8>(skeleton->color.r * slot->color.r * attachmentColor->r * 255); Uint8 r = static_cast<Uint8>(skeleton->color.r * slot->color.r * attachmentColor->r * 255);

View File

@ -43,7 +43,7 @@ function init() {
assetManager.loadTexture(FILE + ".png"); assetManager.loadTexture(FILE + ".png");
assetManager.loadText(FILE + ".atlas"); assetManager.loadText(FILE + ".atlas");
assetManager.loadText("raptor.json"); assetManager.loadText(FILE + ".json");
timeKeeper = new spine.TimeKeeper(); timeKeeper = new spine.TimeKeeper();
requestAnimationFrame(load); requestAnimationFrame(load);
@ -58,7 +58,7 @@ function load() {
var atlasLoader = new spine.AtlasAttachmentLoader(atlas); var atlasLoader = new spine.AtlasAttachmentLoader(atlas);
var skeletonJson = new spine.SkeletonJson(atlasLoader); var skeletonJson = new spine.SkeletonJson(atlasLoader);
skeletonJson.scale = SCALE; 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++) { for (var i = 0; i < NUM_SKELETONS; i++) {
skeleton = new spine.Skeleton(skeletonData); skeleton = new spine.Skeleton(skeletonData);