- Made the FilterPostProcessor cleanup delete framebuffers and textures form memory.
- Changed the way the filter porcessor handle the rendering of the filter; depth right is not disabled anymore when it sjouldn't alowing a filter to output depth with gl_FragDepth if needed git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10955 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
81b458cc4b
commit
147ff8796d
@ -40,6 +40,7 @@ import com.jme3.material.Material;
|
||||
import com.jme3.math.ColorRGBA;
|
||||
import com.jme3.post.Filter;
|
||||
import com.jme3.renderer.RenderManager;
|
||||
import com.jme3.renderer.Renderer;
|
||||
import com.jme3.renderer.ViewPort;
|
||||
import com.jme3.renderer.queue.RenderQueue;
|
||||
import com.jme3.texture.Image.Format;
|
||||
@ -216,6 +217,13 @@ public class BloomFilter extends Filter {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void cleanUpFilter(Renderer r) {
|
||||
if (glowMode != GlowMode.Scene) {
|
||||
preGlowPass.cleanup(r);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the bloom intensity
|
||||
* @return
|
||||
|
@ -105,6 +105,13 @@ public class CartoonEdgeFilter extends Filter {
|
||||
material.setColor("EdgeColor", edgeColor);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void cleanUpFilter(Renderer r) {
|
||||
normalPass.cleanup(r);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Return the depth sensitivity<br>
|
||||
* for more details see {@link #setDepthSensitivity(float depthSensitivity)}
|
||||
|
@ -188,6 +188,11 @@ public class SSAOFilter extends Filter {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void cleanUpFilter(Renderer r) {
|
||||
normalPass.cleanup(r);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the bias<br>
|
||||
* see {@link #setBias(float bias)}
|
||||
|
@ -44,6 +44,7 @@ import com.jme3.post.Filter;
|
||||
import com.jme3.post.Filter.Pass;
|
||||
import com.jme3.renderer.Camera;
|
||||
import com.jme3.renderer.RenderManager;
|
||||
import com.jme3.renderer.Renderer;
|
||||
import com.jme3.renderer.ViewPort;
|
||||
import com.jme3.scene.Node;
|
||||
import com.jme3.scene.Spatial;
|
||||
@ -282,6 +283,11 @@ public class WaterFilter extends Filter {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void cleanUpFilter(Renderer r) {
|
||||
reflectionPass.cleanup(r);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(JmeExporter ex) throws IOException {
|
||||
super.write(ex);
|
||||
|
@ -191,6 +191,11 @@ public abstract class Filter implements Savable {
|
||||
}
|
||||
|
||||
public void cleanup(Renderer r) {
|
||||
r.deleteFrameBuffer(renderFrameBuffer);
|
||||
r.deleteImage(renderedTexture.getImage());
|
||||
if(depthTexture!=null){
|
||||
r.deleteImage(depthTexture.getImage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -437,4 +442,4 @@ public abstract class Filter implements Savable {
|
||||
protected void setProcessor(FilterPostProcessor proc) {
|
||||
processor = proc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -181,18 +181,20 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
|
||||
viewPort.getCamera().resize(originalWidth, originalHeight, false);
|
||||
viewPort.getCamera().setViewPort(left, right, bottom, top);
|
||||
viewPort.getCamera().update();
|
||||
renderManager.setCamera( viewPort.getCamera(), false);
|
||||
renderManager.setCamera( viewPort.getCamera(), false);
|
||||
if (mat.getAdditionalRenderState().isDepthWrite()) {
|
||||
mat.getAdditionalRenderState().setDepthTest(false);
|
||||
mat.getAdditionalRenderState().setDepthWrite(false);
|
||||
}
|
||||
}else{
|
||||
viewPort.getCamera().resize(buff.getWidth(), buff.getHeight(), false);
|
||||
viewPort.getCamera().setViewPort(0, 1, 0, 1);
|
||||
viewPort.getCamera().update();
|
||||
renderManager.setCamera( viewPort.getCamera(), false);
|
||||
mat.getAdditionalRenderState().setDepthTest(true);
|
||||
mat.getAdditionalRenderState().setDepthWrite(true);
|
||||
}
|
||||
|
||||
if (mat.getAdditionalRenderState().isDepthWrite()) {
|
||||
mat.getAdditionalRenderState().setDepthTest(false);
|
||||
mat.getAdditionalRenderState().setDepthWrite(false);
|
||||
}
|
||||
|
||||
fsQuad.setMaterial(mat);
|
||||
fsQuad.updateGeometricState();
|
||||
@ -292,7 +294,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
|
||||
}
|
||||
renderFilterChain(renderer, sceneBuffer);
|
||||
renderer.setFrameBuffer(outputBuffer);
|
||||
|
||||
|
||||
//viewport can be null if no filters are enabled
|
||||
if (viewPort != null) {
|
||||
renderManager.setCamera(viewPort.getCamera(), false);
|
||||
@ -375,6 +377,14 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
|
||||
viewPort.getCamera().setViewPort(left, right, bottom, top);
|
||||
viewPort.setOutputFrameBuffer(outputBuffer);
|
||||
viewPort = null;
|
||||
renderManager.getRenderer().deleteFrameBuffer(renderFrameBuffer);
|
||||
if(depthTexture!=null){
|
||||
renderManager.getRenderer().deleteImage(depthTexture.getImage());
|
||||
}
|
||||
renderManager.getRenderer().deleteImage(filterTexture.getImage());
|
||||
if(renderFrameBufferMS != null){
|
||||
renderManager.getRenderer().deleteFrameBuffer(renderFrameBufferMS);
|
||||
}
|
||||
for (Filter filter : filters) {
|
||||
filter.cleanup(renderer);
|
||||
}
|
||||
@ -549,4 +559,4 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
|
||||
viewPort.setOutputFrameBuffer(renderFrameBuffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user