diff options
author | Kevin Rushforth <[email protected]> | 2007-03-29 22:39:59 +0000 |
---|---|---|
committer | Kevin Rushforth <[email protected]> | 2007-03-29 22:39:59 +0000 |
commit | ecd1e078bb8529490d9951335ab95e041a40f66c (patch) | |
tree | 8da42160266cb3a4731e881c5af5364a51ac8fd3 /src/classes | |
parent | bb5331e867166954565f09ebfae6e9ef8e7d91f3 (diff) |
Issue 239: Stencil buffer should be cleared at the start of each frame
Note that the D3D code may still need to save/restore the stencil write
mask and enable flag.
git-svn-id: https://svn.java.net/svn/j3d-core~svn/trunk@804 ba19aa83-45c5-6ac9-afd3-db810772062c
Diffstat (limited to 'src/classes')
-rw-r--r-- | src/classes/jogl/javax/media/j3d/JoglPipeline.java | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/classes/jogl/javax/media/j3d/JoglPipeline.java b/src/classes/jogl/javax/media/j3d/JoglPipeline.java index 4ba4868..541d78c 100644 --- a/src/classes/jogl/javax/media/j3d/JoglPipeline.java +++ b/src/classes/jogl/javax/media/j3d/JoglPipeline.java @@ -7633,10 +7633,13 @@ class JoglPipeline extends Pipeline { void clear(Context ctx, float r, float g, float b, boolean clearStencil) { if (VERBOSE) System.err.println("JoglPipeline.clear()"); - + JoglContext jctx = (JoglContext) ctx; GLContext context = context(ctx); GL gl = context.getGL(); + + // OBSOLETE CLEAR CODE + /* gl.glClearColor(r, g, b, jctx.getAlphaClearValue()); gl.glClear(GL.GL_COLOR_BUFFER_BIT); @@ -7647,12 +7650,33 @@ class JoglPipeline extends Pipeline { gl.glPopAttrib(); // Issue 239 - clear stencil if specified - // TODO KCR : Issue 239 - should we also set stencil mask? If so, we - // may need to save/restore like we do for depth mask if (clearStencil) { + gl.glPushAttrib(GL.GL_STENCIL_BUFFER_BIT); gl.glClearStencil(0); + gl.glStencilMask(~0); gl.glClear(GL.GL_STENCIL_BUFFER_BIT); + gl.glPopAttrib(); } + */ + + // Mask of which buffers to clear, this always includes color & depth + int clearMask = GL.GL_DEPTH_BUFFER_BIT | GL.GL_COLOR_BUFFER_BIT; + + // Issue 239 - clear stencil if specified + if (clearStencil) { + gl.glPushAttrib(GL.GL_DEPTH_BUFFER_BIT | GL.GL_STENCIL_BUFFER_BIT); + + gl.glClearStencil(0); + gl.glStencilMask(~0); + clearMask |= GL.GL_STENCIL_BUFFER_BIT; + } else { + gl.glPushAttrib(GL.GL_DEPTH_BUFFER_BIT); + } + + gl.glDepthMask(true); + gl.glClearColor(r, g, b, jctx.getAlphaClearValue()); + gl.glClear(clearMask); + gl.glPopAttrib(); } |