diff options
author | Sven Gothel <[email protected]> | 2012-11-06 16:10:51 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2012-11-06 16:10:51 +0100 |
commit | b83b068c0f426f24a58e2bd9f52de9ebd0c7876d (patch) | |
tree | eba95025517c96d7adb83824dec247c77f506fdc /src/jogl/classes/jogamp | |
parent | 9e2563da5e40964d691fe9502de6c9178f98bee0 (diff) |
Fix GLDrawableHelper.recreateGLDrawable(..): Sync GL command stream before destruction of drawable
Lack of finishing the GL command stream lead to a SIGSEGV on Windows w/ Nvidia driver
where probably pending GL commands were still being processed concurrently.
Diffstat (limited to 'src/jogl/classes/jogamp')
-rw-r--r-- | src/jogl/classes/jogamp/opengl/GLDrawableHelper.java | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java b/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java index be63c9278..36dc933ab 100644 --- a/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java +++ b/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java @@ -173,12 +173,17 @@ public class GLDrawableHelper { if( ! drawable.isRealized() ) { return drawable; } - final boolean contextCurrent = null != context && context.isCurrent(); + final GLContext currentContext = GLContext.getCurrent(); final GLDrawableFactory factory = drawable.getFactory(); final NativeSurface surface = drawable.getNativeSurface(); final ProxySurface proxySurface = (surface instanceof ProxySurface) ? (ProxySurface)surface : null; - if(contextCurrent) { + if( null != context ) { + // Ensure to sync GL command stream + if( currentContext != context ) { + context.makeCurrent(); + } + context.getGL().glFinish(); context.release(); } @@ -199,8 +204,8 @@ public class GLDrawableHelper { context.setGLDrawable(drawable, true); // re-association } - if(contextCurrent) { - context.makeCurrent(); + if( null != currentContext ) { + currentContext.makeCurrent(); } return drawable; } |