mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-21 01:36:02 +08:00
[csharp] Port of earlier clipping cleanup commit 485de74: SkeletonClipping.ClipTriangles clean up.
This commit is contained in:
parent
534d174f32
commit
7d57e7d343
@ -737,7 +737,7 @@ namespace Spine {
|
|||||||
|
|
||||||
if (vertices != null) {
|
if (vertices != null) {
|
||||||
if (clipper != null && clipper.IsClipping) {
|
if (clipper != null && clipper.IsClipping) {
|
||||||
clipper.ClipTriangles(vertices, verticesLength, triangles, triangles.Length);
|
clipper.ClipTriangles(vertices, triangles, triangles.Length);
|
||||||
vertices = clipper.ClippedVertices.Items;
|
vertices = clipper.ClippedVertices.Items;
|
||||||
verticesLength = clipper.ClippedVertices.Count;
|
verticesLength = clipper.ClippedVertices.Count;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -78,7 +78,7 @@ namespace Spine {
|
|||||||
clippingPolygon.Clear();
|
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<float> clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;
|
||||||
ExposedList<int> clippedTriangles = this.clippedTriangles;
|
ExposedList<int> clippedTriangles = this.clippedTriangles;
|
||||||
ExposedList<float>[] polygons = clippingPolygons.Items;
|
ExposedList<float>[] polygons = clippingPolygons.Items;
|
||||||
@ -87,7 +87,6 @@ namespace Spine {
|
|||||||
int index = 0;
|
int index = 0;
|
||||||
clippedVertices.Clear();
|
clippedVertices.Clear();
|
||||||
clippedTriangles.Clear();
|
clippedTriangles.Clear();
|
||||||
//outer:
|
|
||||||
for (int i = 0; i < trianglesLength; i += 3) {
|
for (int i = 0; i < trianglesLength; i += 3) {
|
||||||
int vertexOffset = triangles[i] << 1;
|
int vertexOffset = triangles[i] << 1;
|
||||||
float x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];
|
float x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];
|
||||||
@ -107,21 +106,19 @@ namespace Spine {
|
|||||||
int clipOutputCount = clipOutputLength >> 1;
|
int clipOutputCount = clipOutputLength >> 1;
|
||||||
float[] clipOutputItems = clipOutput.Items;
|
float[] clipOutputItems = clipOutput.Items;
|
||||||
float[] clippedVerticesItems = clippedVertices.Resize(s + clipOutputCount * 2).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];
|
float x = clipOutputItems[ii], y = clipOutputItems[ii + 1];
|
||||||
clippedVerticesItems[s] = x;
|
clippedVerticesItems[s] = x;
|
||||||
clippedVerticesItems[s + 1] = y;
|
clippedVerticesItems[s + 1] = y;;
|
||||||
s += 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
s = clippedTriangles.Count;
|
s = clippedTriangles.Count;
|
||||||
int[] clippedTrianglesItems = clippedTriangles.Resize(s + 3 * (clipOutputCount - 2)).Items;
|
int[] clippedTrianglesItems = clippedTriangles.Resize(s + 3 * (clipOutputCount - 2)).Items;
|
||||||
clipOutputCount--;
|
clipOutputCount--;
|
||||||
for (int ii = 1; ii < clipOutputCount; ii++) {
|
for (int ii = 1; ii < clipOutputCount; ii++, s += 3) {
|
||||||
clippedTrianglesItems[s] = index;
|
clippedTrianglesItems[s] = index;
|
||||||
clippedTrianglesItems[s + 1] = index + ii;
|
clippedTrianglesItems[s + 1] = index + ii;
|
||||||
clippedTrianglesItems[s + 2] = index + ii + 1;
|
clippedTrianglesItems[s + 2] = index + ii + 1;
|
||||||
s += 3;
|
|
||||||
}
|
}
|
||||||
index += clipOutputCount + 1;
|
index += clipOutputCount + 1;
|
||||||
} else {
|
} else {
|
||||||
@ -139,13 +136,13 @@ namespace Spine {
|
|||||||
clippedTrianglesItems[s + 1] = index + 1;
|
clippedTrianglesItems[s + 1] = index + 1;
|
||||||
clippedTrianglesItems[s + 2] = index + 2;
|
clippedTrianglesItems[s + 2] = index + 2;
|
||||||
index += 3;
|
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<float> clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;
|
||||||
ExposedList<int> clippedTriangles = this.clippedTriangles;
|
ExposedList<int> clippedTriangles = this.clippedTriangles;
|
||||||
ExposedList<float>[] polygons = clippingPolygons.Items;
|
ExposedList<float>[] polygons = clippingPolygons.Items;
|
||||||
@ -155,7 +152,7 @@ namespace Spine {
|
|||||||
clippedVertices.Clear();
|
clippedVertices.Clear();
|
||||||
clippedUVs.Clear();
|
clippedUVs.Clear();
|
||||||
clippedTriangles.Clear();
|
clippedTriangles.Clear();
|
||||||
//outer:
|
|
||||||
for (int i = 0; i < trianglesLength; i += 3) {
|
for (int i = 0; i < trianglesLength; i += 3) {
|
||||||
int vertexOffset = triangles[i] << 1;
|
int vertexOffset = triangles[i] << 1;
|
||||||
float x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];
|
float x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];
|
||||||
@ -181,7 +178,7 @@ namespace Spine {
|
|||||||
float[] clipOutputItems = clipOutput.Items;
|
float[] clipOutputItems = clipOutput.Items;
|
||||||
float[] clippedVerticesItems = clippedVertices.Resize(s + clipOutputCount * 2).Items;
|
float[] clippedVerticesItems = clippedVertices.Resize(s + clipOutputCount * 2).Items;
|
||||||
float[] clippedUVsItems = clippedUVs.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];
|
float x = clipOutputItems[ii], y = clipOutputItems[ii + 1];
|
||||||
clippedVerticesItems[s] = x;
|
clippedVerticesItems[s] = x;
|
||||||
clippedVerticesItems[s + 1] = y;
|
clippedVerticesItems[s + 1] = y;
|
||||||
@ -191,17 +188,15 @@ namespace Spine {
|
|||||||
float c = 1 - a - b;
|
float c = 1 - a - b;
|
||||||
clippedUVsItems[s] = u1 * a + u2 * b + u3 * c;
|
clippedUVsItems[s] = u1 * a + u2 * b + u3 * c;
|
||||||
clippedUVsItems[s + 1] = v1 * a + v2 * b + v3 * c;
|
clippedUVsItems[s + 1] = v1 * a + v2 * b + v3 * c;
|
||||||
s += 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
s = clippedTriangles.Count;
|
s = clippedTriangles.Count;
|
||||||
int[] clippedTrianglesItems = clippedTriangles.Resize(s + 3 * (clipOutputCount - 2)).Items;
|
int[] clippedTrianglesItems = clippedTriangles.Resize(s + 3 * (clipOutputCount - 2)).Items;
|
||||||
clipOutputCount--;
|
clipOutputCount--;
|
||||||
for (int ii = 1; ii < clipOutputCount; ii++) {
|
for (int ii = 1; ii < clipOutputCount; ii++, s += 3) {
|
||||||
clippedTrianglesItems[s] = index;
|
clippedTrianglesItems[s] = index;
|
||||||
clippedTrianglesItems[s + 1] = index + ii;
|
clippedTrianglesItems[s + 1] = index + ii;
|
||||||
clippedTrianglesItems[s + 2] = index + ii + 1;
|
clippedTrianglesItems[s + 2] = index + ii + 1;
|
||||||
s += 3;
|
|
||||||
}
|
}
|
||||||
index += clipOutputCount + 1;
|
index += clipOutputCount + 1;
|
||||||
} else {
|
} else {
|
||||||
@ -227,7 +222,7 @@ namespace Spine {
|
|||||||
clippedTrianglesItems[s + 1] = index + 1;
|
clippedTrianglesItems[s + 1] = index + 1;
|
||||||
clippedTrianglesItems[s + 2] = index + 2;
|
clippedTrianglesItems[s + 2] = index + 2;
|
||||||
index += 3;
|
index += 3;
|
||||||
break; //continue outer;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -640,7 +640,7 @@ namespace Spine.Unity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (useClipping && clipper.IsClipping) {
|
if (useClipping && clipper.IsClipping) {
|
||||||
clipper.ClipTriangles(workingVerts, attachmentVertexCount << 1, attachmentTriangleIndices, attachmentIndexCount, uvs);
|
clipper.ClipTriangles(workingVerts, attachmentTriangleIndices, attachmentIndexCount, uvs);
|
||||||
workingVerts = clipper.ClippedVertices.Items;
|
workingVerts = clipper.ClippedVertices.Items;
|
||||||
attachmentVertexCount = clipper.ClippedVertices.Count >> 1;
|
attachmentVertexCount = clipper.ClippedVertices.Count >> 1;
|
||||||
attachmentTriangleIndices = clipper.ClippedTriangles.Items;
|
attachmentTriangleIndices = clipper.ClippedTriangles.Items;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user