Explorar o código

Avoid some teeny-tiny per frame allocations by
only creating a new Plane() and setting the water
height uniform when the water height changes.
Also got rid of the redundant dot() product and
Vector3f allocation in the process.

pspeed42 %!s(int64=11) %!d(string=hai) anos
pai
achega
1185d2099b
Modificáronse 1 ficheiros con 10 adicións e 3 borrados
  1. 10 3
      jme3-effects/src/main/java/com/jme3/water/WaterFilter.java

+ 10 - 3
jme3-effects/src/main/java/com/jme3/water/WaterFilter.java

@@ -152,11 +152,11 @@ public class WaterFilter extends Filter {
         biasMatrix.mult(sceneCam.getViewProjectionMatrix(), textureProjMatrix);
         material.setMatrix4("TextureProjMatrix", textureProjMatrix);
         material.setVector3("CameraPosition", sceneCam.getLocation());
-        material.setFloat("WaterHeight", waterHeight);
+        //material.setFloat("WaterHeight", waterHeight);
 
         //update reflection cam      
-        plane = new Plane(Vector3f.UNIT_Y, new Vector3f(0, waterHeight, 0).dot(Vector3f.UNIT_Y));
-        reflectionProcessor.setReflectionClipPlane(plane);        
+        //plane = new Plane(Vector3f.UNIT_Y, new Vector3f(0, waterHeight, 0).dot(Vector3f.UNIT_Y));
+        //reflectionProcessor.setReflectionClipPlane(plane);        
         WaterUtils.updateReflectionCam(reflectionCam, plane, sceneCam);
       
 
@@ -393,6 +393,13 @@ public class WaterFilter extends Filter {
      */
     public void setWaterHeight(float waterHeight) {
         this.waterHeight = waterHeight;
+        this.plane = new Plane(Vector3f.UNIT_Y, waterHeight);
+        if (material != null) {
+            material.setFloat("WaterHeight", waterHeight);
+        }
+        if (reflectionProcessor != null) {
+            reflectionProcessor.setReflectionClipPlane(plane);
+        }                
     }
 
     /**