浏览代码

AbstractShadowFilter: use TempVars instead of temp variables

Wyatt Gillette 2 月之前
父节点
当前提交
9f6546487f
共有 1 个文件被更改,包括 8 次插入5 次删除
  1. 8 5
      jme3-core/src/main/java/com/jme3/shadow/AbstractShadowFilter.java

+ 8 - 5
jme3-core/src/main/java/com/jme3/shadow/AbstractShadowFilter.java

@@ -41,6 +41,7 @@ import com.jme3.renderer.RenderManager;
 import com.jme3.renderer.ViewPort;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.texture.FrameBuffer;
+import com.jme3.util.TempVars;
 import com.jme3.util.clone.Cloner;
 import com.jme3.util.clone.JmeCloneable;
 
@@ -55,9 +56,6 @@ public abstract class AbstractShadowFilter<T extends AbstractShadowRenderer> ext
     protected T shadowRenderer;
     protected ViewPort viewPort;
 
-    private final Vector4f tempVec4 = new Vector4f();
-    private final Matrix4f tempMat4 = new Matrix4f();
-
     /**
      * For serialization only. Do not use.
      */
@@ -101,8 +99,13 @@ public abstract class AbstractShadowFilter<T extends AbstractShadowRenderer> ext
     protected void preFrame(float tpf) {
         shadowRenderer.preFrame(tpf);
         Matrix4f m = viewPort.getCamera().getViewProjectionMatrix();
-        material.setMatrix4("ViewProjectionMatrixInverse", tempMat4.set(m).invertLocal());
-        material.setVector4("ViewProjectionMatrixRow2", tempVec4.set(m.m20, m.m21, m.m22, m.m23));
+        TempVars vars = TempVars.get();
+        try {
+            material.setMatrix4("ViewProjectionMatrixInverse", vars.tempMat4.set(m).invertLocal());
+            material.setVector4("ViewProjectionMatrixRow2", vars.vect4f1.set(m.m20, m.m21, m.m22, m.m23));
+        } finally {
+            vars.release();
+        }
     }
 
     @Override