Browse Source

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 11 năm trước cách đây
mục cha
commit
1185d2099b
1 tập tin đã thay đổi với 10 bổ sung3 xóa
  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);
+        }                
     }
 
     /**