Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
macOS: Fix SDL_GL_CreateContext/MakeCurrent on non-main threads causi…
…ng a Main Thread Checker warning when built with Xcode 11 / the macOS 10.15 SDK.
Fixes bug #4714.
- Loading branch information
|
@@ -95,15 +95,27 @@ - (void)setWindow:(SDL_Window *)newWindow |
|
|
|
|
|
if (newWindow) { |
|
|
SDL_WindowData *windowdata = (SDL_WindowData *)newWindow->driverdata; |
|
|
NSView *contentview = windowdata->sdlContentView; |
|
|
|
|
|
/* This should never be nil since sdlContentView is only nil if the |
|
|
window was created via SDL_CreateWindowFrom, and SDL doesn't allow |
|
|
OpenGL contexts to be created in that case. However, it doesn't hurt |
|
|
to check. */ |
|
|
if (contentview == nil) { |
|
|
/* Prefer to access the cached content view above instead of this, |
|
|
since as of Xcode 11 + SDK 10.15, [window contentView] causes |
|
|
Apple's Main Thread Checker to output a warning. */ |
|
|
contentview = [windowdata->nswindow contentView]; |
|
|
} |
|
|
|
|
|
/* Now sign up for scheduled updates for the new window. */ |
|
|
NSMutableArray *contexts = windowdata->nscontexts; |
|
|
@synchronized (contexts) { |
|
|
[contexts addObject:self]; |
|
|
} |
|
|
|
|
|
if ([self view] != [windowdata->nswindow contentView]) { |
|
|
[self setView:[windowdata->nswindow contentView]]; |
|
|
if ([self view] != contentview) { |
|
|
[self setView:contentview]; |
|
|
if (self == [NSOpenGLContext currentContext]) { |
|
|
[self update]; |
|
|
} else { |
|
|
|
@@ -113,6 +113,7 @@ struct SDL_WindowData |
|
|
{ |
|
|
SDL_Window *window; |
|
|
NSWindow *nswindow; |
|
|
NSView *sdlContentView; /* nil if window is created via CreateWindowFrom */ |
|
|
NSMutableArray *nscontexts; |
|
|
SDL_bool created; |
|
|
SDL_bool inWindowMove; |
|
|
|
@@ -1307,6 +1307,11 @@ - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent |
|
|
data->videodata = videodata; |
|
|
data->nscontexts = [[NSMutableArray alloc] init]; |
|
|
|
|
|
/* Only store this for windows created by us since the content view might |
|
|
* get replaced from under us otherwise, and we only need it when the |
|
|
* window is guaranteed to be created by us (OpenGL contexts). */ |
|
|
data->sdlContentView = created ? [nswindow contentView] : nil; |
|
|
|
|
|
/* Create an event listener for the window */ |
|
|
data->listener = [[Cocoa_WindowListener alloc] init]; |
|
|
|
|
|