From bd5620bf1687518c3a6bd22ef9bbafd719c18355 Mon Sep 17 00:00:00 2001 From: "sha..rd" Date: Sat, 29 Oct 2011 05:16:50 +0000 Subject: [PATCH] * Camera.update() now uses TempVars instead of allocation * IntMap now contains a resettable iterator instead of allocating a new one each time. As a downside, The same IntMap cannot be iterated recursively git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8541 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- engine/src/core/com/jme3/renderer/Camera.java | 11 ++++++++--- engine/src/core/com/jme3/util/IntMap.java | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/engine/src/core/com/jme3/renderer/Camera.java b/engine/src/core/com/jme3/renderer/Camera.java index e7aa296ab..010648f10 100644 --- a/engine/src/core/com/jme3/renderer/Camera.java +++ b/engine/src/core/com/jme3/renderer/Camera.java @@ -1219,9 +1219,11 @@ public class Camera implements Savable, Cloneable { * onFrameChange updates the view frame of the camera. */ public void onFrameChange() { - Vector3f left = getLeft(); - Vector3f direction = getDirection(); - Vector3f up = getUp(); + TempVars vars = TempVars.get(); + + Vector3f left = getLeft(vars.vect1); + Vector3f direction = getDirection(vars.vect2); + Vector3f up = getUp(vars.vect3); float dirDotLocation = direction.dot(location); @@ -1278,6 +1280,9 @@ public class Camera implements Savable, Cloneable { worldPlane[NEAR_PLANE].setConstant(dirDotLocation + frustumNear); viewMatrix.fromFrame(location, direction, up, left); + + vars.release(); + // viewMatrix.transposeLocal(); updateViewProjection(); } diff --git a/engine/src/core/com/jme3/util/IntMap.java b/engine/src/core/com/jme3/util/IntMap.java index 969ccbe75..edf659bab 100644 --- a/engine/src/core/com/jme3/util/IntMap.java +++ b/engine/src/core/com/jme3/util/IntMap.java @@ -45,6 +45,8 @@ import java.util.Map; */ public final class IntMap implements Iterable>, Cloneable { + private final IntMapIterator iterator = new IntMapIterator(); + private Entry[] table; private final float loadFactor; private int size, mask, capacity, threshold; @@ -198,7 +200,8 @@ public final class IntMap implements Iterable>, Cloneable { } public Iterator> iterator() { - return (Iterator>) new IntMapIterator(); + iterator.beginUse(); + return iterator; } final class IntMapIterator implements Iterator> { @@ -219,9 +222,14 @@ public final class IntMap implements Iterable>, Cloneable { private int el = 0; public IntMapIterator() { - cur = table[0]; } + public void beginUse(){ + cur = table[0]; + idx = 0; + el = 0; + } + public boolean hasNext() { return el < size; } @@ -248,9 +256,11 @@ public final class IntMap implements Iterable>, Cloneable { // the entry was null. find another non-null entry. cur = table[++idx]; } while (cur == null); + Entry e = cur; cur = cur.next; el ++; + return e; }