From 0af526b49afab7eae057421c57d7b68deab96d07 Mon Sep 17 00:00:00 2001 From: "remy.bouquet@gmail.com" Date: Tue, 14 Jun 2011 17:10:21 +0000 Subject: [PATCH] WateFilter depth write fix (yeah 'fix' Kirill). Issue was glClear(GL_DEPTH_BUFFER_BIT) seems to not work when glDepthMask is false see http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=257223 Also there might be the same issue when copying frame buffers git-svn-id: http://jmonkeyengine.googlecode.com/svn/trunk@7628 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- engine/src/core/com/jme3/post/FilterPostProcessor.java | 9 +++------ .../lwjgl-ogl/com/jme3/renderer/lwjgl/LwjglRenderer.java | 13 +++++++++++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/engine/src/core/com/jme3/post/FilterPostProcessor.java b/engine/src/core/com/jme3/post/FilterPostProcessor.java index b35c00a6f..62841cb42 100644 --- a/engine/src/core/com/jme3/post/FilterPostProcessor.java +++ b/engine/src/core/com/jme3/post/FilterPostProcessor.java @@ -185,12 +185,12 @@ public class FilterPostProcessor implements SceneProcessor, Savable { filterCam.resize(buff.getWidth(), buff.getHeight(), true); fsQuad.setPosition(0, 0); } - + if (mat.getAdditionalRenderState().isDepthWrite()) { mat.getAdditionalRenderState().setDepthTest(false); mat.getAdditionalRenderState().setDepthWrite(false); } - + fsQuad.setMaterial(mat); fsQuad.updateGeometricState(); @@ -198,10 +198,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable { r.setFrameBuffer(buff); r.clearBuffers(false, true, true); renderManager.renderGeometry(fsQuad); - - //re applying default render state at the end of the render - // to avoid depth write issues, MUST BE A BETTER WAY - r.applyRenderState(RenderState.DEFAULT); + } public boolean isInitialized() { diff --git a/engine/src/lwjgl-ogl/com/jme3/renderer/lwjgl/LwjglRenderer.java b/engine/src/lwjgl-ogl/com/jme3/renderer/lwjgl/LwjglRenderer.java index 55deba25e..aa4ab978a 100644 --- a/engine/src/lwjgl-ogl/com/jme3/renderer/lwjgl/LwjglRenderer.java +++ b/engine/src/lwjgl-ogl/com/jme3/renderer/lwjgl/LwjglRenderer.java @@ -456,6 +456,15 @@ public class LwjglRenderer implements Renderer { bits = GL_COLOR_BUFFER_BIT; } if (depth) { + + //glClear(GL_DEPTH_BUFFER_BIT) seems to not work when glDepthMask is false + //here s some link on openl board + //http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=257223 + //if depth clear is requested, we enable the depthMask + if (context.depthWriteEnabled == false) { + glDepthMask(true); + context.depthWriteEnabled = true; + } bits |= GL_DEPTH_BUFFER_BIT; } if (stencil) { @@ -548,7 +557,7 @@ public class LwjglRenderer implements Renderer { context.polyOffsetUnits = 0; } } - + if (state.getFaceCullMode() != context.cullMode) { if (state.getFaceCullMode() == RenderState.FaceCullMode.Off) { glDisable(GL_CULL_FACE); @@ -700,7 +709,7 @@ public class LwjglRenderer implements Renderer { throw new UnsupportedOperationException("Unrecognized test function: " + testFunc); } } - + /*********************************************************************\ |* Camera and World transforms *| \*********************************************************************/ -- 2.11.0