OSDN Git Service

WateFilter depth write fix (yeah 'fix' Kirill). Issue was glClear(GL_DEPTH_BUFFER_BIT...
authorremy.bouquet@gmail.com <remy.bouquet@gmail.com@75d07b2b-3a1a-0410-a2c5-0572b91ccdca>
Tue, 14 Jun 2011 17:10:21 +0000 (17:10 +0000)
committerremy.bouquet@gmail.com <remy.bouquet@gmail.com@75d07b2b-3a1a-0410-a2c5-0572b91ccdca>
Tue, 14 Jun 2011 17:10:21 +0000 (17:10 +0000)
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
engine/src/lwjgl-ogl/com/jme3/renderer/lwjgl/LwjglRenderer.java

index b35c00a..62841cb 100644 (file)
@@ -185,12 +185,12 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
             filterCam.resize(buff.getWidth(), buff.getHeight(), true);\r
             fsQuad.setPosition(0, 0);\r
         }\r
-        \r
+\r
         if (mat.getAdditionalRenderState().isDepthWrite()) {\r
             mat.getAdditionalRenderState().setDepthTest(false);\r
             mat.getAdditionalRenderState().setDepthWrite(false);\r
         }\r
-            \r
+\r
         fsQuad.setMaterial(mat);\r
         fsQuad.updateGeometricState();\r
 \r
@@ -198,10 +198,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
         r.setFrameBuffer(buff);\r
         r.clearBuffers(false, true, true);\r
         renderManager.renderGeometry(fsQuad);\r
-        \r
-        //re applying default render state at the end of the render \r
-        // to avoid depth write issues, MUST BE A BETTER WAY\r
-        r.applyRenderState(RenderState.DEFAULT);\r
+\r
     }\r
 \r
     public boolean isInitialized() {\r
index 55deba2..aa4ab97 100644 (file)
@@ -456,6 +456,15 @@ public class LwjglRenderer implements Renderer {
             bits = GL_COLOR_BUFFER_BIT;\r
         }\r
         if (depth) {\r
+            \r
+            //glClear(GL_DEPTH_BUFFER_BIT) seems to not work when glDepthMask is false\r
+            //here s some link on openl board\r
+            //http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=257223\r
+            //if depth clear is requested, we enable the depthMask            \r
+            if (context.depthWriteEnabled == false) {\r
+                glDepthMask(true);\r
+                context.depthWriteEnabled = true;\r
+            }\r
             bits |= GL_DEPTH_BUFFER_BIT;\r
         }\r
         if (stencil) {\r
@@ -548,7 +557,7 @@ public class LwjglRenderer implements Renderer {
                 context.polyOffsetUnits = 0;\r
             }\r
         }\r
-        \r
+\r
         if (state.getFaceCullMode() != context.cullMode) {\r
             if (state.getFaceCullMode() == RenderState.FaceCullMode.Off) {\r
                 glDisable(GL_CULL_FACE);\r
@@ -700,7 +709,7 @@ public class LwjglRenderer implements Renderer {
                 throw new UnsupportedOperationException("Unrecognized test function: " + testFunc);\r
         }\r
     }\r
-    \r
+\r
     /*********************************************************************\\r
     |* Camera and World transforms                                       *|\r
     \*********************************************************************/\r