diff --git a/spine-csharp/src/Skeleton.cs b/spine-csharp/src/Skeleton.cs index 4debe9bf7..4315bafc1 100644 --- a/spine-csharp/src/Skeleton.cs +++ b/spine-csharp/src/Skeleton.cs @@ -737,7 +737,7 @@ namespace Spine { if (vertices != null) { if (clipper != null && clipper.IsClipping) { - clipper.ClipTriangles(vertices, verticesLength, triangles, triangles.Length); + clipper.ClipTriangles(vertices, triangles, triangles.Length); vertices = clipper.ClippedVertices.Items; verticesLength = clipper.ClippedVertices.Count; } diff --git a/spine-csharp/src/SkeletonClipping.cs b/spine-csharp/src/SkeletonClipping.cs index 3f4285846..97c5fbc04 100644 --- a/spine-csharp/src/SkeletonClipping.cs +++ b/spine-csharp/src/SkeletonClipping.cs @@ -78,7 +78,7 @@ namespace Spine { clippingPolygon.Clear(); } - public void ClipTriangles (float[] vertices, int verticesLength, int[] triangles, int trianglesLength) { + public void ClipTriangles (float[] vertices, int[] triangles, int trianglesLength) { ExposedList clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; ExposedList clippedTriangles = this.clippedTriangles; ExposedList[] polygons = clippingPolygons.Items; @@ -87,7 +87,6 @@ namespace Spine { int 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]; @@ -107,21 +106,19 @@ namespace Spine { int clipOutputCount = clipOutputLength >> 1; float[] clipOutputItems = clipOutput.Items; float[] clippedVerticesItems = clippedVertices.Resize(s + clipOutputCount * 2).Items; - 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; - s += 2; + clippedVerticesItems[s + 1] = y;; } s = clippedTriangles.Count; int[] clippedTrianglesItems = clippedTriangles.Resize(s + 3 * (clipOutputCount - 2)).Items; clipOutputCount--; - for (int ii = 1; ii < clipOutputCount; ii++) { + for (int ii = 1; ii < clipOutputCount; ii++, s += 3) { clippedTrianglesItems[s] = index; clippedTrianglesItems[s + 1] = index + ii; clippedTrianglesItems[s + 2] = index + ii + 1; - s += 3; } index += clipOutputCount + 1; } else { @@ -139,13 +136,13 @@ namespace Spine { clippedTrianglesItems[s + 1] = index + 1; clippedTrianglesItems[s + 2] = index + 2; index += 3; - break; //continue outer; + break; } } } } - public void ClipTriangles (float[] vertices, int verticesLength, int[] triangles, int trianglesLength, float[] uvs) { + public void ClipTriangles (float[] vertices, int[] triangles, int trianglesLength, float[] uvs) { ExposedList clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; ExposedList clippedTriangles = this.clippedTriangles; ExposedList[] polygons = clippingPolygons.Items; @@ -155,7 +152,7 @@ namespace Spine { clippedVertices.Clear(); clippedUVs.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]; @@ -181,7 +178,7 @@ namespace Spine { float[] clipOutputItems = clipOutput.Items; float[] clippedVerticesItems = clippedVertices.Resize(s + clipOutputCount * 2).Items; float[] clippedUVsItems = clippedUVs.Resize(s + clipOutputCount * 2).Items; - 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; @@ -191,17 +188,15 @@ namespace Spine { float c = 1 - a - b; clippedUVsItems[s] = u1 * a + u2 * b + u3 * c; clippedUVsItems[s + 1] = v1 * a + v2 * b + v3 * c; - s += 2; } s = clippedTriangles.Count; int[] clippedTrianglesItems = clippedTriangles.Resize(s + 3 * (clipOutputCount - 2)).Items; clipOutputCount--; - for (int ii = 1; ii < clipOutputCount; ii++) { + for (int ii = 1; ii < clipOutputCount; ii++, s += 3) { clippedTrianglesItems[s] = index; clippedTrianglesItems[s + 1] = index + ii; clippedTrianglesItems[s + 2] = index + ii + 1; - s += 3; } index += clipOutputCount + 1; } else { @@ -227,7 +222,7 @@ namespace Spine { clippedTrianglesItems[s + 1] = index + 1; clippedTrianglesItems[s + 2] = index + 2; index += 3; - break; //continue outer; + break; } } } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/MeshGenerator.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/MeshGenerator.cs index a9a82ca9b..cb77f0d94 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/MeshGenerator.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/MeshGenerator.cs @@ -640,7 +640,7 @@ namespace Spine.Unity { } if (useClipping && clipper.IsClipping) { - clipper.ClipTriangles(workingVerts, attachmentVertexCount << 1, attachmentTriangleIndices, attachmentIndexCount, uvs); + clipper.ClipTriangles(workingVerts, attachmentTriangleIndices, attachmentIndexCount, uvs); workingVerts = clipper.ClippedVertices.Items; attachmentVertexCount = clipper.ClippedVertices.Count >> 1; attachmentTriangleIndices = clipper.ClippedTriangles.Items;