diff --git a/src/video/quartz/SDL_QuartzVideo.h b/src/video/quartz/SDL_QuartzVideo.h index 708d7c92e..7506e0cd1 100644 --- a/src/video/quartz/SDL_QuartzVideo.h +++ b/src/video/quartz/SDL_QuartzVideo.h @@ -93,6 +93,7 @@ typedef struct SDL_PrivateVideoData { const void *save_mode; /* original mode of the display */ CGDirectPaletteRef palette; /* palette of an 8-bit display */ NSOpenGLContext *gl_context; /* OpenGL rendering context */ + NSGraphicsContext *nsgfx_context; /* Cocoa graphics context */ Uint32 width, height, bpp; /* frequently used data about the display */ Uint32 flags; /* flags for current mode, for teardown purposes */ Uint32 video_set; /* boolean; indicates if video was set correctly */ @@ -132,6 +133,7 @@ typedef struct SDL_PrivateVideoData { #define allow_screensaver (this->hidden->allow_screensaver) #define palette (this->hidden->palette) #define gl_context (this->hidden->gl_context) +#define nsgfx_context (this->hidden->nsgfx_context) #define device_width (this->hidden->width) #define device_height (this->hidden->height) #define device_bpp (this->hidden->bpp) diff --git a/src/video/quartz/SDL_QuartzVideo.m b/src/video/quartz/SDL_QuartzVideo.m index 2961ed527..86b1856c2 100644 --- a/src/video/quartz/SDL_QuartzVideo.m +++ b/src/video/quartz/SDL_QuartzVideo.m @@ -1149,9 +1149,8 @@ static SDL_Surface* QZ_SetVideoModeInternal (_THIS, SDL_Surface *current, } if (qz_window != nil) { - NSGraphicsContext *ctx; - ctx = [NSGraphicsContext graphicsContextWithWindow:qz_window]; - [NSGraphicsContext setCurrentContext:ctx]; + nsgfx_context = [NSGraphicsContext graphicsContextWithWindow:qz_window]; + [NSGraphicsContext setCurrentContext:nsgfx_context]; } /* Setup the new pixel format */ @@ -1507,8 +1506,12 @@ static void QZ_UpdateRects (_THIS, int numRects, SDL_Rect *rects) } else { - CGContextRef cgc = (CGContextRef) - [[NSGraphicsContext currentContext] graphicsPort]; + NSGraphicsContext *ctx = [NSGraphicsContext currentContext]; + if (ctx != nsgfx_context) { /* uhoh, you might be rendering from another thread... */ + [NSGraphicsContext setCurrentContext:nsgfx_context]; + ctx = nsgfx_context; + } + CGContextRef cgc = (CGContextRef) [ctx graphicsPort]; QZ_DrawResizeIcon (this); CGContextFlush (cg_context); CGImageRef image = CGBitmapContextCreateImage (cg_context);