|
@@ -63,14 +63,10 @@
|
|
|
/* This should only be called on the thread on which a user is using the context. */
|
|
|
- (void)updateIfNeeded
|
|
|
{
|
|
|
- int value = SDL_AtomicSet(&self->dirty, 0);
|
|
|
+ const int value = SDL_AtomicSet(&self->dirty, 0);
|
|
|
if (value > 0) {
|
|
|
/* We call the real underlying update here, since -[SDLOpenGLContext update] just calls us. */
|
|
|
- if ([NSThread isMainThread]) {
|
|
|
- [super update];
|
|
|
- } else {
|
|
|
- [super performSelectorOnMainThread:@selector(update) withObject:nil waitUntilDone:NO];
|
|
|
- }
|
|
|
+ [self explicitUpdate];
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -119,9 +115,13 @@
|
|
|
}
|
|
|
|
|
|
if ([self view] != contentview) {
|
|
|
- [self setView:contentview];
|
|
|
+ if ([NSThread isMainThread]) {
|
|
|
+ [self setView:contentview];
|
|
|
+ } else {
|
|
|
+ dispatch_sync(dispatch_get_main_queue(), ^{ [self setView:contentview]; });
|
|
|
+ }
|
|
|
if (self == [NSOpenGLContext currentContext]) {
|
|
|
- [self update];
|
|
|
+ [self explicitUpdate];
|
|
|
} else {
|
|
|
[self scheduleUpdate];
|
|
|
}
|
|
@@ -129,13 +129,27 @@
|
|
|
} else {
|
|
|
[self clearDrawable];
|
|
|
if (self == [NSOpenGLContext currentContext]) {
|
|
|
- [self update];
|
|
|
+ [self explicitUpdate];
|
|
|
} else {
|
|
|
[self scheduleUpdate];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+- (SDL_Window*)window
|
|
|
+{
|
|
|
+ return self->window;
|
|
|
+}
|
|
|
+
|
|
|
+- (void)explicitUpdate
|
|
|
+{
|
|
|
+ if ([NSThread isMainThread]) {
|
|
|
+ [super update];
|
|
|
+ } else {
|
|
|
+ dispatch_sync(dispatch_get_main_queue(), ^{ [super update]; });
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
@end
|
|
|
|
|
|
|
|
@@ -352,8 +366,10 @@ Cocoa_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context)
|
|
|
{
|
|
|
if (context) {
|
|
|
SDLOpenGLContext *nscontext = (SDLOpenGLContext *)context;
|
|
|
- [nscontext setWindow:window];
|
|
|
- [nscontext updateIfNeeded];
|
|
|
+ if ([nscontext window] != window) {
|
|
|
+ [nscontext setWindow:window];
|
|
|
+ [nscontext updateIfNeeded];
|
|
|
+ }
|
|
|
[nscontext makeCurrentContext];
|
|
|
} else {
|
|
|
[NSOpenGLContext clearCurrentContext];
|