소스 검색

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 년 전
부모
커밋
1185d2099b
1개의 변경된 파일10개의 추가작업 그리고 3개의 파일을 삭제
  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);
+        }                
     }
 
     /**