浏览代码

[libgdx] Fixed leak in Triangulator

badlogic 8 年之前
父节点
当前提交
a97d18aafd
共有 1 个文件被更改,包括 5 次插入17 次删除
  1. 5 17
      spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/Triangulator.java

+ 5 - 17
spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/Triangulator.java

@@ -180,6 +180,9 @@ class Triangulator {
 				if (polygon.size > 0) {
 					convexPolygons.add(polygon);
 					convexPolygonsIndices.add(polygonIndices);
+				} else {
+					polygonPool.free(polygon);
+					polygonIndicesPool.free(polygonIndices);					
 				}
 				polygon = polygonPool.obtain();
 				polygon.clear();
@@ -255,6 +258,8 @@ class Triangulator {
 			if (polygon.size == 0) {
 				convexPolygons.removeIndex(i);
 				polygonPool.free(polygon);
+				polygonIndices = convexPolygonsIndices.removeIndex(i);			
+				polygonIndicesPool.free(polygonIndices);
 			}
 		}
 
@@ -277,21 +282,4 @@ class Triangulator {
 		float px = p2x - p1x, py = p2y - p1y;
 		return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1;
 	}
-	
-	public static void main (String[] args) {
-		Triangulator triangulator = new Triangulator();
-		FloatArray polygon = new FloatArray();
-		polygon.addAll(411, 219, 199, 230, 161, 362, 534, 407, 346, 305, 596, 265);
-		ShortArray triangles = triangulator.triangulate(polygon);		
-		System.out.println(triangles);
-		for (short i: triangles.items) System.out.print((i + 1) + ", ");
-		System.out.println();
-		
-		Array<FloatArray> polys = triangulator.decompose(polygon,  triangles);
-		System.out.println(polys);
-		
-		FloatArray poly2 = new FloatArray(new float[] {0, 0, 100, 0, 100, 100, 0, 100 });
-		SkeletonClipping.makeClockwise(poly2);
-		System.out.println(poly2);
-	}
 }