From 485de7498365c105512f378f3c00ddb643810f06 Mon Sep 17 00:00:00 2001 From: Nathan Sweet Date: Sat, 4 May 2024 16:54:31 -0400 Subject: [PATCH] [libgdx] SkeletonClipping#clipTriangles clean up. --- .../com/esotericsoftware/spine/Skeleton.java | 2 +- .../spine/SkeletonRenderer.java | 4 +-- .../spine/utils/SkeletonClipping.java | 30 +++++++------------ 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java index d3f2ab10e..c5da620f5 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java @@ -729,7 +729,7 @@ public class Skeleton { } if (vertices != null) { if (clipper != null && clipper.isClipping()) { - clipper.clipTriangles(vertices, verticesLength, triangles, triangles.length); + clipper.clipTriangles(vertices, triangles, triangles.length); vertices = clipper.getClippedVertices().items; verticesLength = clipper.getClippedVertices().size; } diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java index 93db074c8..de26c7c67 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonRenderer.java @@ -204,7 +204,7 @@ public class SkeletonRenderer { | (int)(r * slotColor.r * color.r * multiplier)); if (clipper.isClipping()) { - clipper.clipTriangles(vertices, verticesLength, triangles, triangles.length, uvs, c, 0, false); + clipper.clipTriangles(vertices, triangles, triangles.length, uvs, c, 0, false); FloatArray clippedVertices = clipper.getClippedVertices(); ShortArray clippedTriangles = clipper.getClippedTriangles(); batch.draw(texture, clippedVertices.items, 0, clippedVertices.size, clippedTriangles.items, 0, @@ -311,7 +311,7 @@ public class SkeletonRenderer { | (int)(red * darkColor.r)); if (clipper.isClipping()) { - clipper.clipTriangles(vertices, verticesLength, triangles, triangles.length, uvs, light, dark, true); + clipper.clipTriangles(vertices, triangles, triangles.length, uvs, light, dark, true); FloatArray clippedVertices = clipper.getClippedVertices(); ShortArray clippedTriangles = clipper.getClippedTriangles(); batch.drawTwoColor(texture, clippedVertices.items, 0, clippedVertices.size, clippedTriangles.items, 0, diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonClipping.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonClipping.java index 77bcfab56..5cefb8c08 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonClipping.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/SkeletonClipping.java @@ -82,18 +82,15 @@ public class SkeletonClipping { return clipAttachment != null; } - public void clipTriangles (float[] vertices, int verticesLength, short[] triangles, int trianglesLength) { - + public void clipTriangles (float[] vertices, short[] triangles, int trianglesLength) { FloatArray clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; ShortArray clippedTriangles = this.clippedTriangles; Object[] polygons = clippingPolygons.items; int polygonsCount = clippingPolygons.size; - int vertexSize = 2; short index = 0; clippedVertices.clear(); clippedTriangles.clear(); - outer: for (int i = 0; i < trianglesLength; i += 3) { int vertexOffset = triangles[i] << 1; float x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1]; @@ -112,27 +109,25 @@ public class SkeletonClipping { int clipOutputCount = clipOutputLength >> 1; float[] clipOutputItems = clipOutput.items; - float[] clippedVerticesItems = clippedVertices.setSize(s + clipOutputCount * vertexSize); - for (int ii = 0; ii < clipOutputLength; ii += 2) { + float[] clippedVerticesItems = clippedVertices.setSize(s + clipOutputCount * 2); + for (int ii = 0; ii < clipOutputLength; ii += 2, s += 2) { float x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; clippedVerticesItems[s] = x; clippedVerticesItems[s + 1] = y; - s += 2; } s = clippedTriangles.size; short[] clippedTrianglesItems = clippedTriangles.setSize(s + 3 * (clipOutputCount - 2)); clipOutputCount--; - for (int ii = 1; ii < clipOutputCount; ii++) { + for (int ii = 1; ii < clipOutputCount; ii++, s += 3) { clippedTrianglesItems[s] = index; clippedTrianglesItems[s + 1] = (short)(index + ii); clippedTrianglesItems[s + 2] = (short)(index + ii + 1); - s += 3; } index += clipOutputCount + 1; } else { - float[] clippedVerticesItems = clippedVertices.setSize(s + 3 * vertexSize); + float[] clippedVerticesItems = clippedVertices.setSize(s + 3 * 2); clippedVerticesItems[s] = x1; clippedVerticesItems[s + 1] = y1; @@ -148,14 +143,14 @@ public class SkeletonClipping { clippedTrianglesItems[s + 1] = (short)(index + 1); clippedTrianglesItems[s + 2] = (short)(index + 2); index += 3; - continue outer; + break; } } } } - public void clipTriangles (float[] vertices, int verticesLength, short[] triangles, int trianglesLength, float[] uvs, - float light, float dark, boolean twoColor) { + public void clipTriangles (float[] vertices, short[] triangles, int trianglesLength, float[] uvs, float light, float dark, + boolean twoColor) { FloatArray clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; ShortArray clippedTriangles = this.clippedTriangles; @@ -166,7 +161,6 @@ public class SkeletonClipping { short index = 0; clippedVertices.clear(); clippedTriangles.clear(); - outer: for (int i = 0; i < trianglesLength; i += 3) { int vertexOffset = triangles[i] << 1; float x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1]; @@ -191,7 +185,7 @@ public class SkeletonClipping { int clipOutputCount = clipOutputLength >> 1; float[] clipOutputItems = clipOutput.items; float[] clippedVerticesItems = clippedVertices.setSize(s + clipOutputCount * vertexSize); - for (int ii = 0; ii < clipOutputLength; ii += 2) { + for (int ii = 0; ii < clipOutputLength; ii += 2, s += 2) { float x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; clippedVerticesItems[s] = x; clippedVerticesItems[s + 1] = y; @@ -207,17 +201,15 @@ public class SkeletonClipping { float c = 1 - a - b; clippedVerticesItems[s] = u1 * a + u2 * b + u3 * c; clippedVerticesItems[s + 1] = v1 * a + v2 * b + v3 * c; - s += 2; } s = clippedTriangles.size; short[] clippedTrianglesItems = clippedTriangles.setSize(s + 3 * (clipOutputCount - 2)); clipOutputCount--; - for (int ii = 1; ii < clipOutputCount; ii++) { + for (int ii = 1; ii < clipOutputCount; ii++, s += 3) { clippedTrianglesItems[s] = index; clippedTrianglesItems[s + 1] = (short)(index + ii); clippedTrianglesItems[s + 2] = (short)(index + ii + 1); - s += 3; } index += clipOutputCount + 1; @@ -267,7 +259,7 @@ public class SkeletonClipping { clippedTrianglesItems[s + 1] = (short)(index + 1); clippedTrianglesItems[s + 2] = (short)(index + 2); index += 3; - continue outer; + break; } } }