diff options
author | Sven Gothel <sgothel@jausoft.com> | 2012-12-22 05:40:36 +0100 |
---|---|---|
committer | Sven Gothel <sgothel@jausoft.com> | 2012-12-22 05:40:36 +0100 |
commit | 1ae0737f34143a5ed655bd9c4d5fe9b0437c7774 (patch) | |
tree | e3e2b4b2ac8af451782fee034e63473ceddd4e6d /src/jogl/classes/jogamp/opengl/GLContextImpl.java | |
parent | 99b79930f6b25bf8b8bc29dc9a36b33717bdbf0e (diff) |
Fix Bug 642 TestJSplitPaneMixHwLw01AWT (AWT-GLCanvas); Robustness GLContext/GLDrawable
- Fix Bug 642 TestJSplitPaneMixHwLw01AWT
On Windows platform when mixing hw/lw JSplitPanel,
the GLCanvas is removed and added when splitter is moved.
The lack of robustness (see below) lead to an exception.
Note: Only w/ GLJPanel (no hw/lw mixing) the splitter can be moved
in both direction. Only here it is guaranteed that the GL component
will survive the action.
- Fix AWT-GLCanvas EDT Runnable: swapBuffer().. / display(..)
- Check drawable.isRealized() within the lock on the performing thread.
This is not possible before issuing the EDT Runnable action
since we cannot hold the lock beforehand.
- Robustness GLDrawableImpl
- boolean realized -> volatile boolean realized
- remove 'synchronized' on isRealized() and setRealized(..)
- Use dbl-checked locking on 'realized' test for swapBuffers() and setRealized(..)
- Robustness GLContextImpl
- Catch createImpl(..) exception and properly return CONTEXT_NOT_CURRENT
Diffstat (limited to 'src/jogl/classes/jogamp/opengl/GLContextImpl.java')
-rw-r--r-- | src/jogl/classes/jogamp/opengl/GLContextImpl.java | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/jogl/classes/jogamp/opengl/GLContextImpl.java b/src/jogl/classes/jogamp/opengl/GLContextImpl.java index 0a665f07e..6498a191b 100644 --- a/src/jogl/classes/jogamp/opengl/GLContextImpl.java +++ b/src/jogl/classes/jogamp/opengl/GLContextImpl.java @@ -567,7 +567,8 @@ public abstract class GLContextImpl extends GLContext { if (null != shareWith) { shareWith.getDrawableImpl().lockSurface(); } - final boolean created; + Throwable exception = null; + boolean created; try { created = createImpl(shareWith); // may throws exception if fails! if( created && isGL3core() && ( ctxMajorVersion>3 || ctxMajorVersion==3 && ctxMinorVersion>=2 ) ) { @@ -580,6 +581,9 @@ public abstract class GLContextImpl extends GLContext { defaultVAO = tmp[0]; gl.getGL2GL3().glBindVertexArray(defaultVAO); } + } catch (Throwable t) { + exception = t; + created = false; } finally { if (null != shareWith) { shareWith.getDrawableImpl().unlockSurface(); @@ -591,6 +595,9 @@ public abstract class GLContextImpl extends GLContext { // Thread.dumpStack(); } else { System.err.println(getThreadName() + ": Create GL context FAILED obj " + toHexString(hashCode()) + ", surf "+toHexString(drawable.getHandle())+" for " + getClass().getName()); + if(null != exception) { + exception.printStackTrace(); + } } } if(!created) { |