aboutsummaryrefslogtreecommitdiff
path: root/engine/src/core/com/jme3/post
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/core/com/jme3/post')
-rw-r--r--engine/src/core/com/jme3/post/Filter.java13
-rw-r--r--engine/src/core/com/jme3/post/FilterPostProcessor.java25
2 files changed, 25 insertions, 13 deletions
diff --git a/engine/src/core/com/jme3/post/Filter.java b/engine/src/core/com/jme3/post/Filter.java
index ef9a6ff..12babf5 100644
--- a/engine/src/core/com/jme3/post/Filter.java
+++ b/engine/src/core/com/jme3/post/Filter.java
@@ -40,6 +40,7 @@ import com.jme3.renderer.Renderer;
import com.jme3.renderer.ViewPort;
import com.jme3.texture.FrameBuffer;
import com.jme3.texture.Image.Format;
+import com.jme3.texture.Texture;
import com.jme3.texture.Texture2D;
import java.io.IOException;
import java.util.Collection;
@@ -236,7 +237,7 @@ public abstract class Filter implements Savable {
* cleanup this filter
* @param r
*/
- protected final void cleanup(Renderer r) {
+ protected final void cleanup(Renderer r) {
processor = null;
if (defaultPass != null) {
defaultPass.cleanup(r);
@@ -269,8 +270,6 @@ public abstract class Filter implements Savable {
protected void cleanUpFilter(Renderer r) {
}
- ;
-
/**
* Must return the material used for this filter.
* this method is called every frame.
@@ -278,6 +277,14 @@ public abstract class Filter implements Savable {
* @return the material used for this filter.
*/
protected abstract Material getMaterial();
+
+ /**
+ * Override if you want to do something special with the depth texture;
+ * @param depthTexture
+ */
+ protected void setDepthTexture(Texture depthTexture){
+ getMaterial().setTexture("DepthTexture", depthTexture);
+ }
/**
* Override this method if you want to make a pre pass, before the actual rendering of the frame
diff --git a/engine/src/core/com/jme3/post/FilterPostProcessor.java b/engine/src/core/com/jme3/post/FilterPostProcessor.java
index 2e48f0f..d97e8e9 100644
--- a/engine/src/core/com/jme3/post/FilterPostProcessor.java
+++ b/engine/src/core/com/jme3/post/FilterPostProcessor.java
@@ -77,7 +77,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
private int originalHeight;
private int lastFilterIndex = -1;
private boolean cameraInit = false;
-
+
/**
* Create a FilterProcessor
* @param assetManager the assetManager
@@ -98,8 +98,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
* @param filter the filter to add
*/
public void addFilter(Filter filter) {
- filters.add(filter);
- filter.setProcessor(this);
+ filters.add(filter);
if (isInitialized()) {
initFilter(filter, viewPort);
@@ -148,14 +147,17 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
* @param vp
*/
private void initFilter(Filter filter, ViewPort vp) {
- filter.init(assetManager, renderManager, vp, width, height);
+ filter.setProcessor(this);
if (filter.isRequiresDepthTexture()) {
- if (!computeDepth && renderFrameBuffer != null) {
+ if (!computeDepth && renderFrameBuffer != null) {
depthTexture = new Texture2D(width, height, Format.Depth24);
renderFrameBuffer.setDepthTexture(depthTexture);
}
computeDepth = true;
- filter.getMaterial().setTexture("DepthTexture", depthTexture);
+ filter.init(assetManager, renderManager, vp, width, height);
+ filter.setDepthTexture(depthTexture);
+ } else {
+ filter.init(assetManager, renderManager, vp, width, height);
}
}
@@ -281,9 +283,9 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
} else if (renderFrameBufferMS != null) {
sceneBuffer = renderFrameBufferMS;
}
- renderFilterChain(renderer, sceneBuffer);
+ renderFilterChain(renderer, sceneBuffer);
renderer.setFrameBuffer(outputBuffer);
-
+
//viewport can be null if no filters are enabled
if (viewPort != null) {
renderManager.setCamera(viewPort.getCamera(), false);
@@ -356,8 +358,11 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
//reseting the viewport camera viewport to its initial value
viewPort.getCamera().resize(originalWidth, originalHeight, true);
viewPort.getCamera().setViewPort(left, right, bottom, top);
- viewPort.setOutputFrameBuffer(outputBuffer);
+ viewPort.setOutputFrameBuffer(outputBuffer);
viewPort = null;
+ for (Filter filter : filters) {
+ filter.cleanup(renderer);
+ }
}
}
@@ -484,7 +489,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
* For internal use only<br>
* returns the depth texture of the scene
* @return
- */
+ */
public Texture2D getDepthTexture() {
return depthTexture;
}