diff --git a/src/native/macosx/org_lwjgl_opengl_Display.m b/src/native/macosx/org_lwjgl_opengl_Display.m index 9c5e3eaa..10ca8483 100644 --- a/src/native/macosx/org_lwjgl_opengl_Display.m +++ b/src/native/macosx/org_lwjgl_opengl_Display.m @@ -139,7 +139,11 @@ static MacOSXPeerInfo *peer_info; } else { if (peer_info->isCALayer) { - [peer_info->glLayer removeLayer]; + peer_info->isCALayer = false; + [peer_info->glLayer removeLayer]; + [peer_info->glLayer release]; + peer_info->glLayer = nil; + return; } if (window_info->window != nil) { @@ -627,6 +631,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_MacOSXDisplay_nDestroyCALayer(JNIEn peer_info->isCALayer = false; [peer_info->glLayer performSelectorOnMainThread:@selector(removeLayer) withObject:nil waitUntilDone:YES]; [peer_info->glLayer release]; + peer_info->glLayer = nil; } } diff --git a/src/native/macosx/org_lwjgl_opengl_MacOSXCanvasPeerInfo.m b/src/native/macosx/org_lwjgl_opengl_MacOSXCanvasPeerInfo.m index 11ba86a6..bbe40f1b 100644 --- a/src/native/macosx/org_lwjgl_opengl_MacOSXCanvasPeerInfo.m +++ b/src/native/macosx/org_lwjgl_opengl_MacOSXCanvasPeerInfo.m @@ -118,10 +118,12 @@ JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_MacOSXCanvasPeerInfo_nInitHandle - (void) removeLayer { // finish any pending blits before destroying the offscreen window to prevent crashes glFinish(); + + // destroy offscreen Display window + [self destroyWindow]; // remove self from root layer - id surfaceLayers = (id )macosx_dsi; - surfaceLayers.layer = nil; + [self removeFromSuperlayer]; } - (void)setNeedsLayout { @@ -152,6 +154,14 @@ JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_MacOSXCanvasPeerInfo_nInitHandle [window_info->window orderOut:nil]; } +- (void) destroyWindow { + if (window_info->window != nil) { + [window_info->view removeFromSuperviewWithoutNeedingDisplay]; + [window_info->window close]; + window_info->window = nil; + } +} + - (void) blitFrameBuffer { // get the size of the CALayer/AWT Canvas