* 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
3.0
sha..rd 13 years ago
parent c590b8d054
commit bd5620bf16
  1. 11
      engine/src/core/com/jme3/renderer/Camera.java
  2. 12
      engine/src/core/com/jme3/util/IntMap.java

@ -1219,9 +1219,11 @@ public class Camera implements Savable, Cloneable {
* <code>onFrameChange</code> 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();
}

@ -45,6 +45,8 @@ import java.util.Map;
*/
public final class IntMap<T> implements Iterable<Entry<T>>, 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<T> implements Iterable<Entry<T>>, Cloneable {
}
public Iterator<Entry<T>> iterator() {
return (Iterator<Entry<T>>) new IntMapIterator();
iterator.beginUse();
return iterator;
}
final class IntMapIterator implements Iterator<Entry<T>> {
@ -219,7 +222,12 @@ public final class IntMap<T> implements Iterable<Entry<T>>, Cloneable {
private int el = 0;
public IntMapIterator() {
}
public void beginUse(){
cur = table[0];
idx = 0;
el = 0;
}
public boolean hasNext() {
@ -248,9 +256,11 @@ public final class IntMap<T> implements Iterable<Entry<T>>, 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;
}

Loading…
Cancel
Save