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 {
|
else {
|
||||||
if (peer_info->isCALayer) {
|
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) {
|
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->isCALayer = false;
|
||||||
[peer_info->glLayer performSelectorOnMainThread:@selector(removeLayer) withObject:nil waitUntilDone:YES];
|
[peer_info->glLayer performSelectorOnMainThread:@selector(removeLayer) withObject:nil waitUntilDone:YES];
|
||||||
[peer_info->glLayer release];
|
[peer_info->glLayer release];
|
||||||
|
peer_info->glLayer = nil;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -118,10 +118,12 @@ JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_MacOSXCanvasPeerInfo_nInitHandle
|
||||||
- (void) removeLayer {
|
- (void) removeLayer {
|
||||||
// finish any pending blits before destroying the offscreen window to prevent crashes
|
// finish any pending blits before destroying the offscreen window to prevent crashes
|
||||||
glFinish();
|
glFinish();
|
||||||
|
|
||||||
|
// destroy offscreen Display window
|
||||||
|
[self destroyWindow];
|
||||||
|
|
||||||
// remove self from root layer
|
// remove self from root layer
|
||||||
id <JAWT_SurfaceLayers> surfaceLayers = (id <JAWT_SurfaceLayers>)macosx_dsi;
|
[self removeFromSuperlayer];
|
||||||
surfaceLayers.layer = nil;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setNeedsLayout {
|
- (void)setNeedsLayout {
|
||||||
|
@ -152,6 +154,14 @@ JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_MacOSXCanvasPeerInfo_nInitHandle
|
||||||
[window_info->window orderOut:nil];
|
[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 {
|
- (void) blitFrameBuffer {
|
||||||
|
|
||||||
// get the size of the CALayer/AWT Canvas
|
// get the size of the CALayer/AWT Canvas
|
||||||
|
|
Loading…
Reference in New Issue