Fix a crash with CALayers/OSX when running on Java 7
This commit is contained in:
parent
ca39cb3cdb
commit
2bbd7ebe5b
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -119,9 +119,11 @@ JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_MacOSXCanvasPeerInfo_nInitHandle
|
|||
// 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
|
||||
|
|
Loading…
Reference in New Issue