Sfoglia il codice sorgente

Modified to keep its projectionMatrixOverride around
to avoid garbage creation in setClipPlane().

pspeed42 11 anni fa
parent
commit
2d549ea833
1 ha cambiato i file con 15 aggiunte e 14 eliminazioni
  1. 15 14
      jme3-core/src/main/java/com/jme3/renderer/Camera.java

+ 15 - 14
jme3-core/src/main/java/com/jme3/renderer/Camera.java

@@ -195,7 +195,8 @@ public class Camera implements Savable, Cloneable {
      * store the value for field parallelProjection
      */
     private boolean parallelProjection = true;
-    protected Matrix4f projectionMatrixOverride;
+    protected Matrix4f projectionMatrixOverride = new Matrix4f();
+    private boolean overrideProjection;
     protected Matrix4f viewMatrix = new Matrix4f();
     protected Matrix4f projectionMatrix = new Matrix4f();
     protected Matrix4f viewProjectionMatrix = new Matrix4f();
@@ -328,15 +329,9 @@ public class Camera implements Savable, Cloneable {
         }
         
         this.parallelProjection = cam.parallelProjection;
-        if (cam.projectionMatrixOverride != null) {
-            if (this.projectionMatrixOverride == null) {
-                this.projectionMatrixOverride = cam.projectionMatrixOverride.clone();
-            } else {
-                this.projectionMatrixOverride.set(cam.projectionMatrixOverride);
-            }
-        } else {
-            this.projectionMatrixOverride = null;
-        }
+        this.overrideProjection = cam.overrideProjection;
+        this.projectionMatrixOverride.set(cam.projectionMatrixOverride);
+        
         this.viewMatrix.set(cam.viewMatrix);
         this.projectionMatrix.set(cam.projectionMatrix);
         this.viewProjectionMatrix.set(cam.viewProjectionMatrix);
@@ -395,7 +390,7 @@ public class Camera implements Savable, Cloneable {
         
         TempVars vars = TempVars.get();
         try {        
-            Matrix4f p = projectionMatrix.clone();
+            Matrix4f p = projectionMatrixOverride.set(projectionMatrix);
 
             Matrix4f ivm = viewMatrix;
 
@@ -1091,7 +1086,13 @@ public class Camera implements Savable, Cloneable {
      * @param projMatrix
      */
     public void setProjectionMatrix(Matrix4f projMatrix) {
-        projectionMatrixOverride = projMatrix;
+        if (projMatrix == null) {
+            overrideProjection = false;
+            projectionMatrixOverride.loadIdentity();   
+        } else {
+            overrideProjection = true;            
+            projectionMatrixOverride.set(projMatrix);
+        }            
         updateViewProjection();
     }
 
@@ -1102,7 +1103,7 @@ public class Camera implements Savable, Cloneable {
      * of the camera.
      */
     public Matrix4f getProjectionMatrix() {
-        if (projectionMatrixOverride != null) {
+        if (overrideProjection) {
             return projectionMatrixOverride;
         }
 
@@ -1113,7 +1114,7 @@ public class Camera implements Savable, Cloneable {
      * Updates the view projection matrix.
      */
     public void updateViewProjection() {
-        if (projectionMatrixOverride != null) {
+        if (overrideProjection) {
             viewProjectionMatrix.set(projectionMatrixOverride).multLocal(viewMatrix);
         } else {
             //viewProjectionMatrix.set(viewMatrix).multLocal(projectionMatrix);