diff options
Diffstat (limited to 'src/classes')
6 files changed, 37 insertions, 12 deletions
diff --git a/src/classes/jogl/javax/media/j3d/JoglPipeline.java b/src/classes/jogl/javax/media/j3d/JoglPipeline.java index 6fdbb9b..4ba4868 100644 --- a/src/classes/jogl/javax/media/j3d/JoglPipeline.java +++ b/src/classes/jogl/javax/media/j3d/JoglPipeline.java @@ -7631,7 +7631,7 @@ class JoglPipeline extends Pipeline { return true; } - void clear(Context ctx, float r, float g, float b) { + void clear(Context ctx, float r, float g, float b, boolean clearStencil) { if (VERBOSE) System.err.println("JoglPipeline.clear()"); JoglContext jctx = (JoglContext) ctx; @@ -7645,7 +7645,15 @@ class JoglPipeline extends Pipeline { gl.glDepthMask(true); gl.glClear(GL.GL_DEPTH_BUFFER_BIT); 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.glClearStencil(0); + gl.glClear(GL.GL_STENCIL_BUFFER_BIT); + } + } void textureFillBackground(Context ctx, float texMinU, float texMaxU, float texMinV, float texMaxV, diff --git a/src/classes/share/javax/media/j3d/Canvas3D.java b/src/classes/share/javax/media/j3d/Canvas3D.java index fd3be9b..778b98e 100644 --- a/src/classes/share/javax/media/j3d/Canvas3D.java +++ b/src/classes/share/javax/media/j3d/Canvas3D.java @@ -4654,9 +4654,15 @@ public class Canvas3D extends Canvas { void clear(BackgroundRetained bg, int winWidth, int winHeight) { - - clear( ctx, bg.color.x, bg.color.y, bg.color.z); - + + // Issue 239 - clear stencil if requested and available + // Note that this is a partial solution, since we eventually want an API + // to control this. + boolean clearStencil = VirtualUniverse.mc.stencilClear && + userStencilAvailable; + + clear(ctx, bg.color.x, bg.color.y, bg.color.z, clearStencil); + // TODO : This is a bug on not mirror bg. Will fix this as a bug after 1.5 beta. // For now, as a workaround, we will check bg.image and bg.image.imageData not null. if((bg.image != null) && (bg.image.imageData != null)) { @@ -5075,8 +5081,8 @@ public class Canvas3D extends Canvas { return Pipeline.getPipeline().releaseCtx(ctx, dpy); } - void clear(Context ctx, float r, float g, float b) { - Pipeline.getPipeline().clear(ctx, r, g, b); + void clear(Context ctx, float r, float g, float b, boolean clearStencil) { + Pipeline.getPipeline().clear(ctx, r, g, b, clearStencil); } void textureFillBackground(Context ctx, float texMinU, float texMaxU, float texMinV, float texMaxV, diff --git a/src/classes/share/javax/media/j3d/MasterControl.java b/src/classes/share/javax/media/j3d/MasterControl.java index 418e325..25d5339 100644 --- a/src/classes/share/javax/media/j3d/MasterControl.java +++ b/src/classes/share/javax/media/j3d/MasterControl.java @@ -337,6 +337,12 @@ class MasterControl { // legacy applications. boolean allowNullGraphicsConfig = false; + // Issue 239 - Flag indicating whether the stencil buffer is cleared by + // default each frame when the color and depth buffers are cleared. + // Note that this is a partial solution, since we eventually want an API + // to control this. + boolean stencilClear = false; + // The global shading language being used. Using a ShaderProgram // with a shading language other than the one specified by // globalShadingLanguage will cause a ShaderError to be generated, @@ -567,6 +573,11 @@ class MasterControl { allowNullGraphicsConfig, "null graphics configs"); + // Issue 239 - check to see whether per-frame stencil clear is enabled + stencilClear = getBooleanProperty("j3d.stencilClear", + stencilClear, + "per-frame stencil clear"); + // Check to see if stereo mode is sharing the Z-buffer for both eyes. sharedStereoZBuffer = getBooleanProperty("j3d.sharedstereozbuffer", diff --git a/src/classes/share/javax/media/j3d/NativePipeline.java b/src/classes/share/javax/media/j3d/NativePipeline.java index f8ca815..d8341df 100644 --- a/src/classes/share/javax/media/j3d/NativePipeline.java +++ b/src/classes/share/javax/media/j3d/NativePipeline.java @@ -3077,10 +3077,10 @@ class NativePipeline extends Pipeline { return useCtx(unbox(ctx), display, unbox(drawable)); } - native void clear(long ctx, float r, float g, float b); + native void clear(long ctx, float r, float g, float b, boolean clearStencil); - void clear(Context ctx, float r, float g, float b) { - clear(unbox(ctx), r, g, b); + void clear(Context ctx, float r, float g, float b, boolean clearStencil) { + clear(unbox(ctx), r, g, b, clearStencil); } diff --git a/src/classes/share/javax/media/j3d/NoopPipeline.java b/src/classes/share/javax/media/j3d/NoopPipeline.java index 394281e..164a080 100644 --- a/src/classes/share/javax/media/j3d/NoopPipeline.java +++ b/src/classes/share/javax/media/j3d/NoopPipeline.java @@ -1368,7 +1368,7 @@ class NoopPipeline extends Pipeline { return true; } - void clear(Context ctx, float r, float g, float b) { + void clear(Context ctx, float r, float g, float b, boolean clearStencil) { } diff --git a/src/classes/share/javax/media/j3d/Pipeline.java b/src/classes/share/javax/media/j3d/Pipeline.java index 380e756..a9f5743 100644 --- a/src/classes/share/javax/media/j3d/Pipeline.java +++ b/src/classes/share/javax/media/j3d/Pipeline.java @@ -1376,7 +1376,7 @@ abstract class Pipeline { return false; } - abstract void clear(Context ctx, float r, float g, float b); + abstract void clear(Context ctx, float r, float g, float b, boolean clearStencil); abstract void textureFillBackground(Context ctx, float texMinU, float texMaxU, float texMinV, float texMaxV, float mapMinX, float mapMaxX, float mapMinY, float mapMaxY, boolean useBiliearFilter); |