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.
experimental
pspeed42 10 years ago
parent c0465b73a8
commit 1185d2099b
  1. 13
      jme3-effects/src/main/java/com/jme3/water/WaterFilter.java

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

Loading…
Cancel
Save