From 45395696c252c215a8a22d05e5da7e98c662d07e Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Thu, 10 Apr 2014 00:31:52 +0200 Subject: Bug 801: Introd. RenderState.BITHINT_GLOBAL_DEPTH_TEST_ENABLED hinting to deal w/ GL_DEPTH_TEST accordingly Fixes VBORegion2PMSAAES2 no-depth-buffer usage and allows user to control behavior w/o quering GL state. If BITHINT_GLOBAL_DEPTH_TEST_ENABLED set: - RegionRenderer.defaultBlendEnable: glDepthMask(false) - RegionRenderer.defaultBlendDisable: glDepthMask(true) - VBORegion2PMSAAES2 enables/disables GL_DEPTH_TEST, otherwise MSAA is corrupt. --- .../com/jogamp/graph/curve/opengl/RegionRenderer.java | 17 +++++++++++++---- .../com/jogamp/graph/curve/opengl/RenderState.java | 18 +++++++++++++++++- 2 files changed, 30 insertions(+), 5 deletions(-) (limited to 'src/jogl/classes/com/jogamp') diff --git a/src/jogl/classes/com/jogamp/graph/curve/opengl/RegionRenderer.java b/src/jogl/classes/com/jogamp/graph/curve/opengl/RegionRenderer.java index a0a318a49..272099385 100644 --- a/src/jogl/classes/com/jogamp/graph/curve/opengl/RegionRenderer.java +++ b/src/jogl/classes/com/jogamp/graph/curve/opengl/RegionRenderer.java @@ -69,7 +69,8 @@ public class RegionRenderer { /** * Default {@link GL#GL_BLEND} enable {@link GLCallback}, - * turning-off depth writing via {@link GL#glDepthMask(boolean)} and turning-on the {@link GL#GL_BLEND} state. + * turning-off depth writing via {@link GL#glDepthMask(boolean)} if {@link RenderState#BITHINT_GLOBAL_DEPTH_TEST_ENABLED} is set + * and turning-on the {@link GL#GL_BLEND} state. *

* Implementation also sets {@link RegionRenderer#getRenderState() RenderState}'s {@link RenderState#BITHINT_BLENDING_ENABLED blending bit-hint}, * which will cause {@link GLRegion#draw(GL2ES2, RegionRenderer, int[]) GLRegion's draw-method} @@ -82,7 +83,11 @@ public class RegionRenderer { public static final GLCallback defaultBlendEnable = new GLCallback() { @Override public void run(final GL gl, final RegionRenderer renderer) { - gl.glDepthMask(false); + if( renderer.rs.isHintMaskSet(RenderState.BITHINT_GLOBAL_DEPTH_TEST_ENABLED) ) { + gl.glDepthMask(false); + // gl.glDisable(GL.GL_DEPTH_TEST); + // gl.glDepthFunc(GL.GL_ALWAYS); + } gl.glEnable(GL.GL_BLEND); gl.glBlendEquation(GL.GL_FUNC_ADD); // default renderer.rs.setHintMask(RenderState.BITHINT_BLENDING_ENABLED); @@ -92,7 +97,7 @@ public class RegionRenderer { /** * Default {@link GL#GL_BLEND} disable {@link GLCallback}, * simply turning-off the {@link GL#GL_BLEND} state - * and turning-on depth writing via {@link GL#glDepthMask(boolean)}. + * and turning-on depth writing via {@link GL#glDepthMask(boolean)} if {@link RenderState#BITHINT_GLOBAL_DEPTH_TEST_ENABLED} is set. *

* Implementation also clears {@link RegionRenderer#getRenderState() RenderState}'s {@link RenderState#BITHINT_BLENDING_ENABLED blending bit-hint}. *

@@ -104,7 +109,11 @@ public class RegionRenderer { public void run(final GL gl, final RegionRenderer renderer) { renderer.rs.clearHintMask(RenderState.BITHINT_BLENDING_ENABLED); gl.glDisable(GL.GL_BLEND); - gl.glDepthMask(true); + if( renderer.rs.isHintMaskSet(RenderState.BITHINT_GLOBAL_DEPTH_TEST_ENABLED) ) { + // gl.glEnable(GL.GL_DEPTH_TEST); + // gl.glDepthFunc(GL.GL_LESS); + gl.glDepthMask(true); + } } }; diff --git a/src/jogl/classes/com/jogamp/graph/curve/opengl/RenderState.java b/src/jogl/classes/com/jogamp/graph/curve/opengl/RenderState.java index 7eb34a62d..f991855c0 100644 --- a/src/jogl/classes/com/jogamp/graph/curve/opengl/RenderState.java +++ b/src/jogl/classes/com/jogamp/graph/curve/opengl/RenderState.java @@ -58,12 +58,28 @@ public class RenderState { * and the clear-color to transparent-black in case of {@link Region#isTwoPass(int) multipass} FBO rendering. *

*

- * Shall be called by custom code, e.g. via {@link RegionRenderer}'s + * Shall be set by custom code, e.g. via {@link RegionRenderer}'s * enable and disable {@link RegionRenderer.GLCallback} as done in * {@link RegionRenderer#defaultBlendEnable} and {@link RegionRenderer#defaultBlendDisable}. *

*/ public static final int BITHINT_BLENDING_ENABLED = 1 << 0 ; + + /** + * Bitfield hint, {@link #isHintMaskSet(int) if set} + * stating globally enabled {@link GL#GL_DEPTH_TEST}, otherwise disabled. + *

+ * Shall be set via {@link #setHintMask(int)} and cleared via {@link #clearHintMask(int)}. + *

+ *

+ * {@link GLRegion#draw(GL2ES2, RegionRenderer, int[]) GLRegion's draw-method} + * may toggle depth test, and reset it's state according to this hint. + *

+ *

+ * Shall be set by custom code, e.g. after {@link RenderState} or {@link RegionRenderer} construction. + *

+ */ + public static final int BITHINT_GLOBAL_DEPTH_TEST_ENABLED = 1 << 1 ; public static RenderState createRenderState(Vertex.Factory pointFactory) { return new RenderState(pointFactory, null); -- cgit v1.2.3