From 39a8ca392d7302831f5689979c4ce89145b732af Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Thu, 28 Apr 2011 22:09:31 +0200 Subject: GLContext GLDebugMessages: Add synchronous status/dumpStack; Remove length in aliased glDebugMessageInsert. - GLDebugMessages add synchronous status - defaults to true - GLContext/GLDebugMessages add dumpStack() if jogl.debug.DebugGL is set - Remove param length in aliased glDebugMessageInsert. --- src/jogl/classes/jogamp/opengl/GLContextImpl.java | 33 ++++++++--------- .../jogamp/opengl/GLDebugMessageHandler.java | 42 ++++++++++++++++++++-- 2 files changed, 56 insertions(+), 19 deletions(-) (limited to 'src/jogl/classes/jogamp/opengl') diff --git a/src/jogl/classes/jogamp/opengl/GLContextImpl.java b/src/jogl/classes/jogamp/opengl/GLContextImpl.java index 6128b30b4..1d5c6911b 100644 --- a/src/jogl/classes/jogamp/opengl/GLContextImpl.java +++ b/src/jogl/classes/jogamp/opengl/GLContextImpl.java @@ -407,7 +407,7 @@ public abstract class GLContextImpl extends GLContext { if(DEBUG_GL) { gl = gl.getContext().setGL( GLPipelineFactory.create("javax.media.opengl.Debug", null, gl, null) ); - glDebugHandler.addListener(new GLDebugMessageHandler.StdErrGLDebugListener()); + glDebugHandler.addListener(new GLDebugMessageHandler.StdErrGLDebugListener(true)); } if(TRACE_GL) { gl = gl.getContext().setGL( GLPipelineFactory.create("javax.media.opengl.Trace", null, gl, new Object[] { System.err } ) ); @@ -1096,17 +1096,23 @@ public abstract class GLContextImpl extends GLContext { return glDebugHandler.isEnabled(); } - public int getContextCreationFlags() { + public final int getContextCreationFlags() { return additionalCtxCreationFlags; } - public void setContextCreationFlags(int flags) { + public final void setContextCreationFlags(int flags) { if(!isCreated()) { additionalCtxCreationFlags = flags & GLContext.CTX_OPTION_DEBUG; } } - public void enableGLDebugMessage(boolean enable) throws GLException { + public final boolean isGLDebugSynchronous() { return glDebugHandler.isSynchronous(); } + + public final void setGLDebugSynchronous(boolean synchronous) { + glDebugHandler.setSynchronous(synchronous); + } + + public final void enableGLDebugMessage(boolean enable) throws GLException { if(!isCreated()) { if(enable) { additionalCtxCreationFlags |= GLContext.CTX_OPTION_DEBUG; @@ -1119,19 +1125,15 @@ public abstract class GLContextImpl extends GLContext { } } - public void addGLDebugListener(GLDebugListener listener) { + public final void addGLDebugListener(GLDebugListener listener) { glDebugHandler.addListener(listener); } - public void removeGLDebugListener(GLDebugListener listener) { + public final void removeGLDebugListener(GLDebugListener listener) { glDebugHandler.removeListener(listener); } - public int getGLDebugListenerSize() { - return glDebugHandler.listenerSize(); - } - - public void glDebugMessageControl(int source, int type, int severity, int count, IntBuffer ids, boolean enabled) { + public final void glDebugMessageControl(int source, int type, int severity, int count, IntBuffer ids, boolean enabled) { if(glDebugHandler.isExtensionARB()) { gl.getGL2GL3().glDebugMessageControlARB(source, type, severity, count, ids, enabled); } else if(glDebugHandler.isExtensionAMD()) { @@ -1139,7 +1141,7 @@ public abstract class GLContextImpl extends GLContext { } } - public void glDebugMessageControl(int source, int type, int severity, int count, int[] ids, int ids_offset, boolean enabled) { + public final void glDebugMessageControl(int source, int type, int severity, int count, int[] ids, int ids_offset, boolean enabled) { if(glDebugHandler.isExtensionARB()) { gl.getGL2GL3().glDebugMessageControlARB(source, type, severity, count, ids, ids_offset, enabled); } else if(glDebugHandler.isExtensionAMD()) { @@ -1147,12 +1149,11 @@ public abstract class GLContextImpl extends GLContext { } } - public void glDebugMessageInsert(int source, int type, int id, int severity, int length, String buf) { + public final void glDebugMessageInsert(int source, int type, int id, int severity, String buf) { if(glDebugHandler.isExtensionARB()) { - gl.getGL2GL3().glDebugMessageInsertARB(source, type, id, severity, length, buf); + gl.getGL2GL3().glDebugMessageInsertARB(source, type, id, severity, -1, buf); } else if(glDebugHandler.isExtensionAMD()) { - if(0>length) { length = 0; } - gl.getGL2GL3().glDebugMessageInsertAMD(GLDebugMessage.translateARB2AMDCategory(source, type), severity, id, length, buf); + gl.getGL2GL3().glDebugMessageInsertAMD(GLDebugMessage.translateARB2AMDCategory(source, type), severity, id, 0, buf); } } } diff --git a/src/jogl/classes/jogamp/opengl/GLDebugMessageHandler.java b/src/jogl/classes/jogamp/opengl/GLDebugMessageHandler.java index f67c916ea..09be202dd 100644 --- a/src/jogl/classes/jogamp/opengl/GLDebugMessageHandler.java +++ b/src/jogl/classes/jogamp/opengl/GLDebugMessageHandler.java @@ -78,6 +78,7 @@ public class GLDebugMessageHandler { private int extType; private long glDebugMessageCallbackProcAddress; private boolean extAvailable; + private boolean synchronous; // licefycle: enable - disable/EOL private long handle; @@ -94,6 +95,7 @@ public class GLDebugMessageHandler { this.extType = 0; this.extAvailable = false; this.handle = 0; + this.synchronous = true; } public void init(boolean enable) { @@ -176,7 +178,32 @@ public class GLDebugMessageHandler { } /** - * @throws GLException if context not current or callback registration failed (enable) + * @see javax.media.opengl.GLContext#isGLDebugSynchronous() + */ + public final boolean isSynchronous() { return synchronous; } + + /** + * @see javax.media.opengl.GLContext#setGLDebugSynchronous(boolean) + */ + public final void setSynchronous(boolean synchronous) { + this.synchronous = synchronous; + if(isEnabled() && isExtensionARB()) { + setSynchronousImpl(); + } + } + private final void setSynchronousImpl() { + if(synchronous) { + ctx.getGL().glEnable(GL2GL3.GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB); + } else { + ctx.getGL().glDisable(GL2GL3.GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB); + } + if(DEBUG) { + System.err.println("GLDebugMessageHandler: synchronous "+synchronous); + } + } + + /** + * @see javax.media.opengl.GLContext#enableGLDebugMessage(boolean) */ public final void enable(boolean enable) throws GLException { ctx.validateCurrent(); @@ -186,6 +213,7 @@ public class GLDebugMessageHandler { enableImpl(enable); } final void enableImpl(boolean enable) throws GLException { + setSynchronousImpl(); if(enable) { if(0 == handle) { handle = register0(glDebugMessageCallbackProcAddress, extType); @@ -234,9 +262,17 @@ public class GLDebugMessageHandler { } } - public static class StdErrGLDebugListener implements GLDebugListener { + public static class StdErrGLDebugListener implements GLDebugListener { + boolean threadDump; + + public StdErrGLDebugListener(boolean threadDump) { + this.threadDump = threadDump; + } public void messageSent(GLDebugMessage event) { - System.err.println(event); + System.err.println(event); + if(threadDump) { + Thread.dumpStack(); + } } } -- cgit v1.2.3