Fixed pooling polygon FloatArrays.

This commit is contained in:
NathanSweet 2014-05-29 19:53:58 +02:00
parent 292cd144fe
commit 8736bd6bcb

View File

@ -35,11 +35,17 @@ import com.esotericsoftware.spine.attachments.BoundingBoxAttachment;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.FloatArray;
import com.badlogic.gdx.utils.Pool;
public class SkeletonBounds { public class SkeletonBounds {
private float minX, minY, maxX, maxY; private float minX, minY, maxX, maxY;
private Array<BoundingBoxAttachment> boundingBoxes = new Array(); private Array<BoundingBoxAttachment> boundingBoxes = new Array();
private Array<FloatArray> polygons = new Array(); private Array<FloatArray> polygons = new Array();
private Pool<FloatArray> polygonPool = new Pool() {
protected Object newObject () {
return new FloatArray();
}
};
public void update (Skeleton skeleton, boolean updateAabb) { public void update (Skeleton skeleton, boolean updateAabb) {
Array<BoundingBoxAttachment> boundingBoxes = this.boundingBoxes; Array<BoundingBoxAttachment> boundingBoxes = this.boundingBoxes;
@ -49,8 +55,8 @@ public class SkeletonBounds {
float x = skeleton.getX(), y = skeleton.getY(); float x = skeleton.getX(), y = skeleton.getY();
boundingBoxes.clear(); boundingBoxes.clear();
polygonPool.freeAll(polygons);
polygons.clear(); polygons.clear();
polygons.ensureCapacity(slotCount);
for (int i = 0; i < slotCount; i++) { for (int i = 0; i < slotCount; i++) {
Slot slot = slots.get(i); Slot slot = slots.get(i);
@ -59,13 +65,12 @@ public class SkeletonBounds {
BoundingBoxAttachment boundingBox = (BoundingBoxAttachment)attachment; BoundingBoxAttachment boundingBox = (BoundingBoxAttachment)attachment;
boundingBoxes.add(boundingBox); boundingBoxes.add(boundingBox);
polygons.size = boundingBoxes.size; FloatArray polygon = polygonPool.obtain();
FloatArray polygon = polygons.peek(); polygons.add(polygon);
if (polygon == null) polygons.set(polygons.size - 1, polygon = new FloatArray());
int vertexCount = boundingBox.getVertices().length; int vertexCount = boundingBox.getVertices().length;
polygon.ensureCapacity(vertexCount); polygon.ensureCapacity(vertexCount);
polygon.size = vertexCount; polygon.size = vertexCount;
boundingBox.computeWorldVertices(x, y, slot.bone, polygon.items); boundingBox.computeWorldVertices(x, y, slot.bone, polygon.items);
} }
} }