cocoa: Make sure GL context destruction happens on the main thread.

Fixes #10900.

(cherry picked from commit 344546b4ea)
This commit is contained in:
Ryan C. Gordon
2024-10-24 14:53:16 -04:00
parent 00f15dd215
commit 5cb87ff99f

View File

@@ -507,13 +507,33 @@ int Cocoa_GL_SwapWindow(_THIS, SDL_Window * window)
return 0;
}}
void Cocoa_GL_DeleteContext(_THIS, SDL_GLContext context)
{ @autoreleasepool
static void DispatchedDeleteContext(SDL_GLContext context)
{
SDLOpenGLContext *nscontext = (__bridge SDLOpenGLContext *)context;
[nscontext cleanup];
CFRelease(context);
}}
@autoreleasepool {
SDLOpenGLContext *nscontext = (__bridge SDLOpenGLContext *)context;
[nscontext cleanup];
CFRelease(context);
}
}
void Cocoa_GL_DeleteContext(_THIS, SDL_GLContext 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__