Fix a crash with CALayers/OSX when running on Java 7

This commit is contained in:
kappaOne 2013-04-13 18:14:32 -07:00
parent ca39cb3cdb
commit 2bbd7ebe5b
2 changed files with 18 additions and 3 deletions

View File

@ -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;
}
}

View File

@ -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 <JAWT_SurfaceLayers> surfaceLayers = (id <JAWT_SurfaceLayers>)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