summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
index b577d8639..bbe097331 100644
--- a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
+++ b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
@@ -773,6 +773,8 @@ public class MacOSXCGLContext extends GLContextImpl
long nsOpenGLLayer;
/** Synchronized by instance's monitor */
boolean done;
+ /** Synchronized by instance's monitor */
+ boolean revoke;
AttachGLLayerCmd(final OffscreenLayerSurface ols, final long ctx, final int shaderProgram, final long pfmt, final long pbuffer, final int texID,
final boolean isOpaque, final int texWidth, final int texHeight, final int winWidth, final int winHeight) {
@@ -788,11 +790,12 @@ public class MacOSXCGLContext extends GLContextImpl
this.winWidth = winWidth;
this.winHeight = winHeight;
this.done = false;
+ this.revoke = false;
this.nsOpenGLLayer = 0;
}
public final String contentToString() {
- return "done "+done+", size tex["+texWidth+"x"+texHeight+"], win["+winWidth+"x"+winHeight+"], ctx "+toHexString(ctx)+", opaque "+isOpaque+", texID "+texID+", pbuffer "+toHexString(pbuffer)+", nsOpenGLLayer "+toHexString(nsOpenGLLayer);
+ return "done "+done+", revoke "+revoke+", size tex["+texWidth+"x"+texHeight+"], win["+winWidth+"x"+winHeight+"], ctx "+toHexString(ctx)+", opaque "+isOpaque+", texID "+texID+", pbuffer "+toHexString(pbuffer)+", nsOpenGLLayer "+toHexString(nsOpenGLLayer);
}
@Override
@@ -803,7 +806,7 @@ public class MacOSXCGLContext extends GLContextImpl
@Override
public void run() {
synchronized(this) {
- if( !done ) {
+ if( !done && !revoke ) {
try {
final int maxwait = screenVSyncTimeout/2000; // TO 1/2 of current screen-vsync in [ms]
final RecursiveLock surfaceLock = ols.getLock();
@@ -872,7 +875,9 @@ public class MacOSXCGLContext extends GLContextImpl
System.err.println("Caught exception on thread "+getThreadName());
t.printStackTrace();
}
- CGL.releaseNSOpenGLLayer(cmd.nsOpenGLLayer);
+ if( 0 != cmd.nsOpenGLLayer ) {
+ CGL.releaseNSOpenGLLayer(cmd.nsOpenGLLayer);
+ }
if(DEBUG) {
System.err.println("NSOpenGLLayer.Detach: OK, layer "+toHexString(cmd.nsOpenGLLayer)+" - "+getThreadName());
}
@@ -881,6 +886,7 @@ public class MacOSXCGLContext extends GLContextImpl
} else if(DEBUG) {
System.err.println("NSOpenGLLayer.Detach: Skipped "+toHexString(cmd.nsOpenGLLayer)+" - "+getThreadName());
}
+ cmd.revoke = true; // revoke is essential if attach hasn't been done yet.
cmd.notifyAll();
}
}
@@ -952,7 +958,7 @@ public class MacOSXCGLContext extends GLContextImpl
if(DEBUG) {
System.err.println("MaxOSXCGLContext.NSOpenGLImpl.associateDrawable(true).calayer: "+attachGLLayerCmd);
}
- OSXUtil.RunOnMainThread(false, false /* kickNSApp */, attachGLLayerCmd);
+ OSXUtil.RunOnMainThread(false /* wait */, false /* kickNSApp */, attachGLLayerCmd);
} else { // -> null == backingLayerHost
lastWidth = drawable.getSurfaceWidth();
lastHeight = drawable.getSurfaceHeight();
@@ -977,7 +983,7 @@ public class MacOSXCGLContext extends GLContextImpl
if(DEBUG) {
System.err.println("MaxOSXCGLContext.NSOpenGLImpl.associateDrawable(false).calayer: "+dCmd+" - "+Thread.currentThread().getName());
}
- OSXUtil.RunOnMainThread(false, true /* kickNSApp */, dCmd);
+ OSXUtil.RunOnMainThread(false /* wait */, true /* kickNSApp */, dCmd);
if( null != gl3ShaderProgram ) {
gl3ShaderProgram.destroy(MacOSXCGLContext.this.gl.getGL3());
gl3ShaderProgram = null;