Removed the redundant camera.update() calls.

Switched many of the lists to SafeArrayList to avoid
per frame iterator allocations.
experimental
pspeed42 11 years ago
parent 5d6d2b9bd7
commit 852ae28605
  1. 32
      jme3-core/src/main/java/com/jme3/post/FilterPostProcessor.java

@ -40,6 +40,7 @@ import com.jme3.texture.FrameBuffer;
import com.jme3.texture.Image.Format;
import com.jme3.texture.Texture2D;
import com.jme3.ui.Picture;
import com.jme3.util.SafeArrayList;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
@ -62,7 +63,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
private FrameBuffer renderFrameBuffer;
private Texture2D filterTexture;
private Texture2D depthTexture;
private List<Filter> filters = new ArrayList<Filter>();
private SafeArrayList<Filter> filters = new SafeArrayList<Filter>(Filter.class);
private AssetManager assetManager;
private Picture fsQuad;
private boolean computeDepth = false;
@ -185,7 +186,10 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
if (buff == outputBuffer) {
viewPort.getCamera().resize(originalWidth, originalHeight, false);
viewPort.getCamera().setViewPort(left, right, bottom, top);
viewPort.getCamera().update();
// update is redundant because resize and setViewPort will both
// run the appropriate (and same) onXXXChange methods.
// Also, update() updates some things that don't need to be updated.
//viewPort.getCamera().update();
renderManager.setCamera( viewPort.getCamera(), false);
if (mat.getAdditionalRenderState().isDepthWrite()) {
mat.getAdditionalRenderState().setDepthTest(false);
@ -194,7 +198,10 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
}else{
viewPort.getCamera().resize(buff.getWidth(), buff.getHeight(), false);
viewPort.getCamera().setViewPort(0, 1, 0, 1);
viewPort.getCamera().update();
// update is redundant because resize and setViewPort will both
// run the appropriate (and same) onXXXChange methods.
// Also, update() updates some things that don't need to be updated.
//viewPort.getCamera().update();
renderManager.setCamera( viewPort.getCamera(), false);
mat.getAdditionalRenderState().setDepthTest(true);
mat.getAdditionalRenderState().setDepthWrite(true);
@ -216,8 +223,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
public void postQueue(RenderQueue rq) {
for (Iterator<Filter> it = filters.iterator(); it.hasNext();) {
Filter filter = it.next();
for (Filter filter : filters.getArray()) {
if (filter.isEnabled()) {
filter.postQueue(rq);
}
@ -330,8 +336,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
}
}
for (Iterator<Filter> it = filters.iterator(); it.hasNext();) {
Filter filter = it.next();
for (Filter filter : filters.getArray()) {
if (filter.isEnabled()) {
filter.preFrame(tpf);
}
@ -392,7 +397,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
if(renderFrameBufferMS != null){
renderFrameBufferMS.dispose();
}
for (Filter filter : filters) {
for (Filter filter : filters.getArray()) {
filter.cleanup(renderer);
}
}
@ -457,8 +462,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
renderFrameBuffer.setColorTexture(filterTexture);
}
for (Iterator<Filter> it = filters.iterator(); it.hasNext();) {
Filter filter = it.next();
for (Filter filter : filters.getArray()) {
initFilter(filter, vp);
}
setupViewPortFrameBuffer();
@ -504,14 +508,14 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
public void write(JmeExporter ex) throws IOException {
OutputCapsule oc = ex.getCapsule(this);
oc.write(numSamples, "numSamples", 0);
oc.writeSavableArrayList((ArrayList) filters, "filters", null);
oc.writeSavableArrayList(new ArrayList(filters), "filters", null);
}
public void read(JmeImporter im) throws IOException {
InputCapsule ic = im.getCapsule(this);
numSamples = ic.readInt("numSamples", 0);
filters = ic.readSavableArrayList("filters", null);
for (Filter filter : filters) {
filters = new SafeArrayList<Filter>(Filter.class, ic.readSavableArrayList("filters", null));
for (Filter filter : filters.getArray()) {
filter.setProcessor(this);
setFilterState(filter, filter.isEnabled());
}
@ -543,7 +547,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
* @return a filter assignable form the given type
*/
public <T extends Filter> T getFilter(Class<T> filterType) {
for (Filter c : filters) {
for (Filter c : filters.getArray()) {
if (filterType.isAssignableFrom(c.getClass())) {
return (T) c;
}

Loading…
Cancel
Save