aboutsummaryrefslogtreecommitdiff
path: root/engine/src/core-effects/com/jme3/post/filters/TranslucentBucketFilter.java
diff options
context:
space:
mode:
authorScott Barta <sbarta@google.com>2012-03-09 13:52:20 -0800
committerScott Barta <sbarta@google.com>2012-03-09 14:13:24 -0800
commita6b44658eb1c55295f132a36233a11aa2bd8f9cf (patch)
tree4006b29d319de8635ca7cc2384782618f6c80ee7 /engine/src/core-effects/com/jme3/post/filters/TranslucentBucketFilter.java
parent59b2e6871c65f58fdad78cd7229c292f6a177578 (diff)
downloadjmonkeyengine-a6b44658eb1c55295f132a36233a11aa2bd8f9cf.tar.gz
New drop of the jmonkeyengine libraryHEADandroid-wear-n-preview-3android-wear-n-preview-2android-wear-n-preview-1android-sdk-support_r11android-sdk-4.4.2_r1.0.1android-sdk-4.4.2_r1android-n-preview-5android-n-preview-4android-n-preview-3android-n-preview-2android-n-preview-1android-n-mr2-preview-2android-n-mr2-preview-1android-n-mr1-preview-2android-n-mr1-preview-1android-n-iot-release-smart-display-r2android-n-iot-release-smart-displayandroid-n-iot-release-polk-at1android-n-iot-release-lg-thinq-wk7android-n-iot-release-ihome-igv1android-n-iot-preview-4android-l-preview_r2android-cts-6.0_r9android-cts-6.0_r8android-cts-6.0_r7android-cts-6.0_r6android-cts-6.0_r5android-cts-6.0_r4android-cts-6.0_r32android-cts-6.0_r31android-cts-6.0_r30android-cts-6.0_r3android-cts-6.0_r29android-cts-6.0_r28android-cts-6.0_r27android-cts-6.0_r26android-cts-6.0_r25android-cts-6.0_r24android-cts-6.0_r23android-cts-6.0_r22android-cts-6.0_r21android-cts-6.0_r20android-cts-6.0_r2android-cts-6.0_r19android-cts-6.0_r18android-cts-6.0_r17android-cts-6.0_r16android-cts-6.0_r15android-cts-6.0_r14android-cts-6.0_r13android-cts-6.0_r12android-cts-6.0_r1android-cts-4.4_r4android-cts-4.4_r1android-cts-4.2_r2android-cts-4.2_r1android-cts-4.1_r4android-cts-4.1_r2android-cts-4.1_r1android-7.1.2_r9android-7.1.2_r8android-7.1.2_r6android-7.1.2_r5android-7.1.2_r4android-7.1.2_r39android-7.1.2_r38android-7.1.2_r37android-7.1.2_r36android-7.1.2_r33android-7.1.2_r32android-7.1.2_r30android-7.1.2_r3android-7.1.2_r29android-7.1.2_r28android-7.1.2_r27android-7.1.2_r25android-7.1.2_r24android-7.1.2_r23android-7.1.2_r2android-7.1.2_r19android-7.1.2_r18android-7.1.2_r17android-7.1.2_r16android-7.1.2_r15android-7.1.2_r14android-7.1.2_r13android-7.1.2_r12android-7.1.2_r11android-7.1.2_r10android-7.1.2_r1android-6.0.1_r9android-6.0.1_r81android-6.0.1_r80android-6.0.1_r8android-6.0.1_r79android-6.0.1_r78android-6.0.1_r77android-6.0.1_r74android-6.0.1_r73android-6.0.1_r72android-6.0.1_r70android-6.0.1_r7android-6.0.1_r69android-6.0.1_r68android-6.0.1_r67android-6.0.1_r66android-6.0.1_r65android-6.0.1_r63android-6.0.1_r62android-6.0.1_r61android-6.0.1_r60android-6.0.1_r59android-6.0.1_r58android-6.0.1_r57android-6.0.1_r56android-6.0.1_r55android-6.0.1_r54android-6.0.1_r53android-6.0.1_r52android-6.0.1_r51android-6.0.1_r50android-6.0.1_r5android-6.0.1_r49android-6.0.1_r48android-6.0.1_r47android-6.0.1_r46android-6.0.1_r45android-6.0.1_r43android-6.0.1_r42android-6.0.1_r41android-6.0.1_r40android-6.0.1_r4android-6.0.1_r33android-6.0.1_r32android-6.0.1_r31android-6.0.1_r30android-6.0.1_r3android-6.0.1_r28android-6.0.1_r27android-6.0.1_r26android-6.0.1_r25android-6.0.1_r24android-6.0.1_r22android-6.0.1_r21android-6.0.1_r20android-6.0.1_r18android-6.0.1_r17android-6.0.1_r16android-6.0.1_r13android-6.0.1_r12android-6.0.1_r11android-6.0.1_r10android-6.0.1_r1android-6.0.0_r7android-6.0.0_r6android-6.0.0_r5android-6.0.0_r41android-6.0.0_r4android-6.0.0_r3android-6.0.0_r26android-6.0.0_r25android-6.0.0_r24android-6.0.0_r23android-6.0.0_r2android-6.0.0_r13android-6.0.0_r12android-6.0.0_r11android-6.0.0_r1android-4.4w_r1android-4.4_r1.2.0.1android-4.4_r1.2android-4.4_r1.1.0.1android-4.4_r1.1android-4.4_r1.0.1android-4.4_r1android-4.4_r0.9android-4.4_r0.8android-4.4_r0.7android-4.4.4_r2.0.1android-4.4.4_r2android-4.4.4_r1.0.1android-4.4.4_r1android-4.4.3_r1.1.0.1android-4.4.3_r1.1android-4.4.3_r1.0.1android-4.4.3_r1android-4.4.2_r2.0.1android-4.4.2_r2android-4.4.2_r1.0.1android-4.4.2_r1android-4.4.1_r1.0.1android-4.4.1_r1android-4.3_r3.1android-4.3_r3android-4.3_r2.3android-4.3_r2.2android-4.3_r2.1android-4.3_r2android-4.3_r1.1android-4.3_r1android-4.3_r0.9.1android-4.3_r0.9android-4.3.1_r1android-4.2_r1android-4.2.2_r1.2android-4.2.2_r1.1android-4.2.2_r1android-4.2.1_r1.2android-4.2.1_r1.1android-4.2.1_r1android-4.1.2_r2.1android-4.1.2_r2android-4.1.2_r1android-4.1.1_r6.1android-4.1.1_r6android-4.1.1_r5android-4.1.1_r4android-4.1.1_r3android-4.1.1_r2android-4.1.1_r1.1android-4.1.1_r1tools_r22.2tools_r22tools_r21nougat-mr2.3-releasenougat-mr2.2-releasenougat-mr2.1-releasenougat-mr2-security-releasenougat-mr2-releasenougat-mr2-pixel-releasenougat-mr2-devnougat-iot-releasen-iot-preview-4mastermarshmallow-releasemarshmallow-mr3-releasemarshmallow-mr2-releasemarshmallow-mr1-releasemarshmallow-mr1-devmarshmallow-dr1.6-releasemarshmallow-dr1.5-releasemarshmallow-dr1.5-devmarshmallow-dr-releasemarshmallow-dr-dragon-releasemarshmallow-dr-devmarshmallow-devmarshmallow-cts-releasemainl-previewkitkat-wearkitkat-releasekitkat-mr2.2-releasekitkat-mr2.1-releasekitkat-mr2-releasekitkat-mr1.1-releasekitkat-mr1-releasekitkat-devkitkat-cts-releasekitkat-cts-devjb-releasejb-mr2.0.0-releasejb-mr2.0-releasejb-mr2-releasejb-mr2-devjb-mr1.1-releasejb-mr1.1-dev-plus-aospjb-mr1.1-devjb-mr1-releasejb-mr1-dev-plus-aospjb-mr1-devjb-mr0-releasejb-devidea133-weekly-releaseidea133
A new drop of the jmonkeyengine library sources, based on a 2012-03-05 snapshot. Fixes a few unnecessary memory allocations in the main rendering loop. Change-Id: I51ac0942fe87204df102cfdce746b59a5cb5ff85
Diffstat (limited to 'engine/src/core-effects/com/jme3/post/filters/TranslucentBucketFilter.java')
-rw-r--r--engine/src/core-effects/com/jme3/post/filters/TranslucentBucketFilter.java75
1 files changed, 75 insertions, 0 deletions
diff --git a/engine/src/core-effects/com/jme3/post/filters/TranslucentBucketFilter.java b/engine/src/core-effects/com/jme3/post/filters/TranslucentBucketFilter.java
index 47be413..c377a58 100644
--- a/engine/src/core-effects/com/jme3/post/filters/TranslucentBucketFilter.java
+++ b/engine/src/core-effects/com/jme3/post/filters/TranslucentBucketFilter.java
@@ -5,6 +5,7 @@
package com.jme3.post.filters;
import com.jme3.asset.AssetManager;
+import com.jme3.effect.ParticleEmitter;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.post.Filter;
@@ -12,8 +13,14 @@ import com.jme3.renderer.RenderManager;
import com.jme3.renderer.Renderer;
import com.jme3.renderer.ViewPort;
import com.jme3.renderer.queue.RenderQueue;
+import com.jme3.scene.Node;
+
+import com.jme3.scene.Spatial;
import com.jme3.texture.FrameBuffer;
+import com.jme3.texture.Texture;
import com.jme3.texture.Texture2D;
+import java.util.logging.Level;
+import java.util.logging.Logger;
/**
* A filter to handle translucent objects when rendering a scene with filters that uses depth like WaterFilter and SSAOFilter
@@ -22,11 +29,25 @@ import com.jme3.texture.Texture2D;
*/
public final class TranslucentBucketFilter extends Filter {
+ private final static Logger logger = Logger.getLogger(TranslucentBucketFilter.class.getName());
private RenderManager renderManager;
+ private boolean enabledSoftParticles = false;
+ private Texture depthTexture;
+ private ViewPort viewPort;
+
+ public TranslucentBucketFilter() {
+ super("TranslucentBucketFilter");
+ }
+
+ public TranslucentBucketFilter(boolean enabledSoftParticles) {
+ this();
+ this.enabledSoftParticles = enabledSoftParticles;
+ }
@Override
protected void initFilter(AssetManager manager, RenderManager rm, ViewPort vp, int w, int h) {
this.renderManager = rm;
+ this.viewPort = vp;
material = new Material(manager, "Common/MatDefs/Post/Overlay.j3md");
material.setColor("Color", ColorRGBA.White);
Texture2D tex = processor.getFilterTexture();
@@ -37,6 +58,26 @@ public final class TranslucentBucketFilter extends Filter {
material.clearParam("NumSamples");
}
renderManager.setHandleTranslucentBucket(false);
+ if (enabledSoftParticles && depthTexture != null) {
+ initSoftParticles(vp, true);
+ }
+ }
+
+ private void initSoftParticles(ViewPort vp, boolean enabledSP) {
+ if (depthTexture != null) {
+ for (Spatial scene : vp.getScenes()) {
+ makeSoftParticleEmitter(scene, enabledSP && enabled);
+ }
+ }
+
+ }
+
+ @Override
+ protected void setDepthTexture(Texture depthTexture) {
+ this.depthTexture = depthTexture;
+ if (enabledSoftParticles && depthTexture != null) {
+ initSoftParticles(viewPort, true);
+ }
}
/**
@@ -49,6 +90,11 @@ public final class TranslucentBucketFilter extends Filter {
}
@Override
+ protected boolean isRequiresDepthTexture() {
+ return enabledSoftParticles;
+ }
+
+ @Override
protected void postFrame(RenderManager renderManager, ViewPort viewPort, FrameBuffer prevFilterBuffer, FrameBuffer sceneBuffer) {
renderManager.setCamera(viewPort.getCamera(), false);
if (prevFilterBuffer != sceneBuffer) {
@@ -63,6 +109,8 @@ public final class TranslucentBucketFilter extends Filter {
if (renderManager != null) {
renderManager.setHandleTranslucentBucket(true);
}
+
+ initSoftParticles(viewPort, false);
}
@Override
@@ -76,5 +124,32 @@ public final class TranslucentBucketFilter extends Filter {
if (renderManager != null) {
renderManager.setHandleTranslucentBucket(!enabled);
}
+ initSoftParticles(viewPort, enabledSoftParticles);
+ }
+
+ private void makeSoftParticleEmitter(Spatial scene, boolean enabled) {
+ if (scene instanceof Node) {
+ Node n = (Node) scene;
+ for (Spatial child : n.getChildren()) {
+ makeSoftParticleEmitter(child, enabled);
+ }
+ }
+ if (scene instanceof ParticleEmitter) {
+ ParticleEmitter emitter = (ParticleEmitter) scene;
+ if (enabled) {
+ enabledSoftParticles = enabled;
+
+ emitter.getMaterial().selectTechnique("SoftParticles", renderManager);
+ emitter.getMaterial().setTexture("DepthTexture", processor.getDepthTexture());
+ emitter.setQueueBucket(RenderQueue.Bucket.Translucent);
+
+ logger.log(Level.INFO, "Made particle Emitter {0} soft.", emitter.getName());
+ } else {
+ emitter.getMaterial().clearParam("DepthTexture");
+ emitter.getMaterial().selectTechnique("Default", renderManager);
+ // emitter.setQueueBucket(RenderQueue.Bucket.Transparent);
+ logger.log(Level.INFO, "Particle Emitter {0} is not soft anymore.", emitter.getName());
+ }
+ }
}
}