aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/jogamp
diff options
context:
space:
mode:
Diffstat (limited to 'src/jogl/classes/jogamp')
-rw-r--r--src/jogl/classes/jogamp/opengl/GLContextImpl.java33
-rw-r--r--src/jogl/classes/jogamp/opengl/GLDebugMessageHandler.java42
2 files changed, 56 insertions, 19 deletions
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();
+ }
}
}