|
@@ -507,13 +507,33 @@ int Cocoa_GL_SwapWindow(_THIS, SDL_Window * window)
|
|
|
return 0;
|
|
|
}}
|
|
|
|
|
|
+static void DispatchedDeleteContext(SDL_GLContext context)
|
|
|
+{
|
|
|
+ @autoreleasepool {
|
|
|
+ SDLOpenGLContext *nscontext = (__bridge SDLOpenGLContext *)context;
|
|
|
+ [nscontext cleanup];
|
|
|
+ CFRelease(context);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void Cocoa_GL_DeleteContext(_THIS, SDL_GLContext context)
|
|
|
-{ @autoreleasepool
|
|
|
{
|
|
|
- SDLOpenGLContext *nscontext = (__bridge SDLOpenGLContext *)context;
|
|
|
- [nscontext cleanup];
|
|
|
- CFRelease(context);
|
|
|
-}}
|
|
|
+ if ([NSThread isMainThread]) {
|
|
|
+ DispatchedDeleteContext(context);
|
|
|
+ } else {
|
|
|
+ if (SDL_opengl_async_dispatch) {
|
|
|
+ dispatch_async(dispatch_get_main_queue(), ^{
|
|
|
+ DispatchedDeleteContext(context);
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ dispatch_sync(dispatch_get_main_queue(), ^{
|
|
|
+ DispatchedDeleteContext(context);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+}
|
|
|
|
|
|
/* We still support OpenGL as long as Apple offers it, deprecated or not, so disable deprecation warnings about it. */
|
|
|
#ifdef __clang__
|