diff --git a/spine-ts/spine-core/src/Skeleton.ts b/spine-ts/spine-core/src/Skeleton.ts index 589a143bf..ddcda904d 100644 --- a/spine-ts/spine-core/src/Skeleton.ts +++ b/spine-ts/spine-core/src/Skeleton.ts @@ -640,7 +640,7 @@ export class Skeleton { } if (vertices && triangles) { if (clipper != null && clipper.isClipping()) { - clipper.clipTriangles(vertices, verticesLength, triangles, triangles.length); + clipper.clipTriangles(vertices, triangles, triangles.length); vertices = clipper.clippedVertices; verticesLength = clipper.clippedVertices.length; } diff --git a/spine-ts/spine-core/src/SkeletonClipping.ts b/spine-ts/spine-core/src/SkeletonClipping.ts index 7c970d716..a6d88f841 100644 --- a/spine-ts/spine-core/src/SkeletonClipping.ts +++ b/spine-ts/spine-core/src/SkeletonClipping.ts @@ -80,29 +80,27 @@ export class SkeletonClipping { return this.clipAttachment != null; } - clipTriangles (vertices: NumberArrayLike, verticesLength: number, triangles: NumberArrayLike, trianglesLength: number): void; - clipTriangles (vertices: NumberArrayLike, verticesLength: number, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike, + clipTriangles (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number): void; + clipTriangles (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike, light: Color, dark: Color, twoColor: boolean): void; - clipTriangles (vertices: NumberArrayLike, verticesLength: number, triangles: NumberArrayLike, trianglesLength: number, uvs?: NumberArrayLike, + clipTriangles (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number, uvs?: NumberArrayLike, light?: Color, dark?: Color, twoColor?: boolean): void { if (uvs && light && dark && typeof twoColor === 'boolean') - this.clipTrianglesRender(vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor); + this.clipTrianglesRender(vertices, triangles, trianglesLength, uvs, light, dark, twoColor); else - this.clipTrianglesNoRender(vertices, verticesLength, triangles, trianglesLength); + this.clipTrianglesNoRender(vertices, triangles, trianglesLength); } - private clipTrianglesNoRender (vertices: NumberArrayLike, verticesLength: number, triangles: NumberArrayLike, trianglesLength: number) { + private clipTrianglesNoRender (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number) { let clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; let clippedTriangles = this.clippedTriangles; let polygons = this.clippingPolygons!; let polygonsCount = polygons.length; - let vertexSize = 2; let index = 0; clippedVertices.length = 0; clippedTriangles.length = 0; - outer: for (let i = 0; i < trianglesLength; i += 3) { let vertexOffset = triangles[i] << 1; let x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1]; @@ -121,27 +119,25 @@ export class SkeletonClipping { let clipOutputCount = clipOutputLength >> 1; let clipOutputItems = this.clipOutput; - let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize); - for (let ii = 0; ii < clipOutputLength; ii += 2) { + let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * 2); + for (let ii = 0; ii < clipOutputLength; ii += 2, s += 2) { let x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; clippedVerticesItems[s] = x; clippedVerticesItems[s + 1] = y; - s += 2; } s = clippedTriangles.length; let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); clipOutputCount--; - for (let ii = 1; ii < clipOutputCount; ii++) { + for (let 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 { - let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize); + let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * 2); clippedVerticesItems[s] = x1; clippedVerticesItems[s + 1] = y1; @@ -157,13 +153,13 @@ export class SkeletonClipping { clippedTrianglesItems[s + 1] = (index + 1); clippedTrianglesItems[s + 2] = (index + 2); index += 3; - continue outer; + break; } } } } - private clipTrianglesRender (vertices: NumberArrayLike, verticesLength: number, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike, + private clipTrianglesRender (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike, light: Color, dark: Color, twoColor: boolean) { let clipOutput = this.clipOutput, clippedVertices = this.clippedVertices; @@ -175,7 +171,6 @@ export class SkeletonClipping { let index = 0; clippedVertices.length = 0; clippedTriangles.length = 0; - outer: for (let i = 0; i < trianglesLength; i += 3) { let vertexOffset = triangles[i] << 1; let x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1]; @@ -200,7 +195,7 @@ export class SkeletonClipping { let clipOutputCount = clipOutputLength >> 1; let clipOutputItems = this.clipOutput; let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize); - for (let ii = 0; ii < clipOutputLength; ii += 2) { + for (let ii = 0; ii < clipOutputLength; ii += 2, s += vertexSize) { let x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; clippedVerticesItems[s] = x; clippedVerticesItems[s + 1] = y; @@ -220,17 +215,15 @@ export class SkeletonClipping { clippedVerticesItems[s + 10] = dark.b; clippedVerticesItems[s + 11] = dark.a; } - s += vertexSize; } s = clippedTriangles.length; let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); clipOutputCount--; - for (let ii = 1; ii < clipOutputCount; ii++) { + for (let 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; @@ -304,7 +297,7 @@ export class SkeletonClipping { clippedTrianglesItems[s + 1] = (index + 1); clippedTrianglesItems[s + 2] = (index + 2); index += 3; - continue outer; + break; } } } @@ -363,6 +356,7 @@ export class SkeletonClipping { } else { output.push(inputX2); output.push(inputY2); + continue; } } else if (s2) { // v1 outside, v2 inside let ix = inputX2 - inputX, iy = inputY2 - inputY, t = s1 / (ix * ey - iy * ex); diff --git a/spine-ts/spine-pixi/src/Spine.ts b/spine-ts/spine-pixi/src/Spine.ts index 1f8f3a0b0..4f383db9d 100644 --- a/spine-ts/spine-pixi/src/Spine.ts +++ b/spine-ts/spine-pixi/src/Spine.ts @@ -381,7 +381,7 @@ export class Spine extends Container { let finalIndicesLength: number; if (Spine.clipper.isClipping()) { - Spine.clipper.clipTriangles(this.verticesCache, numFloats, triangles, triangles.length, uvs, this.lightColor, this.darkColor, useDarkColor); + Spine.clipper.clipTriangles(this.verticesCache, triangles, triangles.length, uvs, this.lightColor, this.darkColor, useDarkColor); finalVertices = Spine.clipper.clippedVertices; finalVerticesLength = finalVertices.length; diff --git a/spine-ts/spine-threejs/src/SkeletonMesh.ts b/spine-ts/spine-threejs/src/SkeletonMesh.ts index 10973c1af..91ca469ad 100644 --- a/spine-ts/spine-threejs/src/SkeletonMesh.ts +++ b/spine-ts/spine-threejs/src/SkeletonMesh.ts @@ -255,7 +255,6 @@ export class SkeletonMesh extends THREE.Object3D { if (clipper.isClipping()) { clipper.clipTriangles( vertices, - numFloats, triangles, triangles.length, uvs, diff --git a/spine-ts/spine-webgl/src/SkeletonRenderer.ts b/spine-ts/spine-webgl/src/SkeletonRenderer.ts index e9f7df5f6..ad81b6a3d 100644 --- a/spine-ts/spine-webgl/src/SkeletonRenderer.ts +++ b/spine-ts/spine-webgl/src/SkeletonRenderer.ts @@ -165,7 +165,7 @@ export class SkeletonRenderer { } if (clipper.isClipping()) { - clipper.clipTriangles(renderable.vertices, renderable.numFloats, triangles, triangles.length, uvs, finalColor, darkColor, twoColorTint); + clipper.clipTriangles(renderable.vertices, triangles, triangles.length, uvs, finalColor, darkColor, twoColorTint); let clippedVertices = new Float32Array(clipper.clippedVertices); let clippedTriangles = clipper.clippedTriangles; if (transformer) transformer(clippedVertices, clippedVertices.length, vertexSize);