[csharp] Port of earlier clipping cleanup commit 485de74: SkeletonClipping.ClipTriangles clean up.

This commit is contained in:
Harald Csaszar 2024-06-10 18:44:59 +02:00
parent 534d174f32
commit 7d57e7d343
3 changed files with 12 additions and 17 deletions

View File

@ -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;
}

View File

@ -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<float> clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;
ExposedList<int> clippedTriangles = this.clippedTriangles;
ExposedList<float>[] 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<float> clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;
ExposedList<int> clippedTriangles = this.clippedTriangles;
ExposedList<float>[] 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;
}
}
}

View File

@ -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;