|
@@ -174,11 +174,10 @@ static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- [self clearDrawable];
|
|
|
- if (self == [NSOpenGLContext currentContext]) {
|
|
|
- [self explicitUpdate];
|
|
|
+ if ([NSThread isMainThread]) {
|
|
|
+ [self setView:nil];
|
|
|
} else {
|
|
|
- [self scheduleUpdate];
|
|
|
+ dispatch_sync(dispatch_get_main_queue(), ^{ [self setView:nil]; });
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -205,17 +204,22 @@ static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-- (void)dealloc
|
|
|
+- (void)cleanup
|
|
|
{
|
|
|
+ [self setWindow:NULL];
|
|
|
+
|
|
|
SDL_DelHintCallback(SDL_HINT_MAC_OPENGL_ASYNC_DISPATCH, SDL_OpenGLAsyncDispatchChanged, NULL);
|
|
|
if (self->displayLink) {
|
|
|
CVDisplayLinkRelease(self->displayLink);
|
|
|
+ self->displayLink = nil;
|
|
|
}
|
|
|
if (self->swapIntervalCond) {
|
|
|
SDL_DestroyCond(self->swapIntervalCond);
|
|
|
+ self->swapIntervalCond = NULL;
|
|
|
}
|
|
|
if (self->swapIntervalMutex) {
|
|
|
SDL_DestroyMutex(self->swapIntervalMutex);
|
|
|
+ self->swapIntervalMutex = NULL;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -518,8 +522,9 @@ int Cocoa_GL_SwapWindow(_THIS, SDL_Window *window)
|
|
|
int Cocoa_GL_DeleteContext(_THIS, SDL_GLContext context)
|
|
|
{
|
|
|
@autoreleasepool {
|
|
|
- SDLOpenGLContext *nscontext = (SDLOpenGLContext *)CFBridgingRelease(context);
|
|
|
- [nscontext setWindow:NULL];
|
|
|
+ SDLOpenGLContext *nscontext = (__bridge SDLOpenGLContext *)context;
|
|
|
+ [nscontext cleanup];
|
|
|
+ CFRelease(context);
|
|
|
}
|
|
|
return 0;
|
|
|
}
|