diff options
Diffstat (limited to 'src/jogl/classes/jogamp/opengl')
-rw-r--r-- | src/jogl/classes/jogamp/opengl/GLAutoDrawableBase.java | 13 | ||||
-rw-r--r-- | src/jogl/classes/jogamp/opengl/GLDrawableHelper.java | 23 | ||||
-rw-r--r-- | src/jogl/classes/jogamp/opengl/GLRunnableTask.java | 2 |
3 files changed, 28 insertions, 10 deletions
diff --git a/src/jogl/classes/jogamp/opengl/GLAutoDrawableBase.java b/src/jogl/classes/jogamp/opengl/GLAutoDrawableBase.java index e1cd59a04..6e6aaf58d 100644 --- a/src/jogl/classes/jogamp/opengl/GLAutoDrawableBase.java +++ b/src/jogl/classes/jogamp/opengl/GLAutoDrawableBase.java @@ -279,7 +279,13 @@ public abstract class GLAutoDrawableBase implements GLAutoDrawable, GLStateKeepe shallClose = true; } if( shallClose ) { - destroyAvoidAwareOfLocking(); + try { + destroyAvoidAwareOfLocking(); + } catch( final Throwable t ) { + // Intentionally catch and ignore exception, + // so the destroy mechanism of the native windowing system is not corrupted! + GLException.dumpThrowable("ignored", t); + } } } @@ -602,6 +608,11 @@ public abstract class GLAutoDrawableBase implements GLAutoDrawable, GLStateKeepe } @Override + public void flushGLRunnables() { + helper.flushGLRunnables(); + } + + @Override public final void setAutoSwapBufferMode(final boolean enable) { helper.setAutoSwapBufferMode(enable); } diff --git a/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java b/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java index 945ca5479..f91e1bdba 100644 --- a/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java +++ b/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java @@ -526,8 +526,9 @@ public class GLDrawableHelper { } catch (final Throwable t) { if( null == firstCaught ) { firstCaught = t; + } else { + GLException.dumpThrowable("subsequent", t); } - GLException.dumpThrowable(t); } disposeCount++; } @@ -541,8 +542,9 @@ public class GLDrawableHelper { } catch (final Throwable t) { if( null == firstCaught ) { firstCaught = t; + } else { + GLException.dumpThrowable("subsequent", t); } - GLException.dumpThrowable(t); } listenersToBeInit.add(listener); disposeCount++; @@ -1125,8 +1127,7 @@ public class GLDrawableHelper { final Runnable initAction) { if(null==context) { if (DEBUG) { - final Exception e = new GLException("Info: GLDrawableHelper " + this + ".invokeGL(): NULL GLContext"); - GLException.dumpThrowable(e); + GLException.dumpThrowable("informal", new GLException("Info: GLDrawableHelper " + this + ".invokeGL(): NULL GLContext")); } return; } @@ -1196,7 +1197,6 @@ public class GLDrawableHelper { forceNativeRelease(context); } } catch (final Throwable t) { - GLException.dumpThrowable(t); contextCloseCaught = t; } flushGLRunnables(); // always flush GLRunnables at dispose @@ -1208,6 +1208,9 @@ public class GLDrawableHelper { } } if( null != disposeCaught ) { + if( null != contextCloseCaught ) { + GLException.dumpThrowable("subsequent", contextCloseCaught); + } throw disposeCaught; } if( null != contextCloseCaught ) { @@ -1283,7 +1286,6 @@ public class GLDrawableHelper { drawable.swapBuffers(); } } catch (final Throwable t) { - GLException.dumpThrowable(t); glEventListenerCaught = t; } finally { if( _releaseExclusiveThread ) { @@ -1296,7 +1298,6 @@ public class GLDrawableHelper { try { context.release(); } catch (final Throwable t) { - GLException.dumpThrowable(t); contextReleaseCaught = t; } } @@ -1311,6 +1312,9 @@ public class GLDrawableHelper { } if( null != glEventListenerCaught ) { flushGLRunnables(); + if( null != contextReleaseCaught ) { + GLException.dumpThrowable("subsequent", contextReleaseCaught); + } throw GLException.newGLException(glEventListenerCaught); } if( null != contextReleaseCaught ) { @@ -1401,7 +1405,6 @@ public class GLDrawableHelper { tdS = tdX - tdS; // swapBuffers } } catch (final Throwable t) { - GLException.dumpThrowable(t); glEventListenerCaught = t; } finally { if( _releaseExclusiveThread ) { @@ -1416,7 +1419,6 @@ public class GLDrawableHelper { context.release(); ctxReleased = true; } catch (final Throwable t) { - GLException.dumpThrowable(t); contextReleaseCaught = t; } } @@ -1432,6 +1434,9 @@ public class GLDrawableHelper { } if( null != glEventListenerCaught ) { flushGLRunnables(); + if( null != contextReleaseCaught ) { + GLException.dumpThrowable("subsequent", contextReleaseCaught); + } throw GLException.newGLException(glEventListenerCaught); } if( null != contextReleaseCaught ) { diff --git a/src/jogl/classes/jogamp/opengl/GLRunnableTask.java b/src/jogl/classes/jogamp/opengl/GLRunnableTask.java index 0ceef6bf7..ca1c1869e 100644 --- a/src/jogl/classes/jogamp/opengl/GLRunnableTask.java +++ b/src/jogl/classes/jogamp/opengl/GLRunnableTask.java @@ -90,8 +90,10 @@ public class GLRunnableTask implements GLRunnable { /** * Simply flush this task and notify a waiting executor. + * <p> * The executor which might have been blocked until notified * will be unblocked and the task removed from the queue. + * </p> * * @see #isFlushed() * @see #isInQueue() |