mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-05 19:08:12 +00:00
cocoa: Make sure GL context destruction happens on the main thread.
Fixes #10900.
(cherry picked from commit 344546b4ea
)
This commit is contained in:
@@ -507,13 +507,33 @@ int Cocoa_GL_SwapWindow(_THIS, SDL_Window * window)
|
|||||||
return 0;
|
return 0;
|
||||||
}}
|
}}
|
||||||
|
|
||||||
void Cocoa_GL_DeleteContext(_THIS, SDL_GLContext context)
|
static void DispatchedDeleteContext(SDL_GLContext context)
|
||||||
{ @autoreleasepool
|
|
||||||
{
|
{
|
||||||
SDLOpenGLContext *nscontext = (__bridge SDLOpenGLContext *)context;
|
@autoreleasepool {
|
||||||
[nscontext cleanup];
|
SDLOpenGLContext *nscontext = (__bridge SDLOpenGLContext *)context;
|
||||||
CFRelease(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. */
|
/* We still support OpenGL as long as Apple offers it, deprecated or not, so disable deprecation warnings about it. */
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
|
Reference in New Issue
Block a user