Quartz: Restore 1.2.14 behaviour of letting apps draw from background thread.
Strictly speaking, this isn't encouraged, but it's a regression.
--- a/src/video/quartz/SDL_QuartzVideo.h Tue Jan 03 01:41:17 2012 -0500
+++ b/src/video/quartz/SDL_QuartzVideo.h Mon Jan 02 21:25:34 2012 -0800
@@ -93,6 +93,7 @@
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 @@
#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)
--- a/src/video/quartz/SDL_QuartzVideo.m Tue Jan 03 01:41:17 2012 -0500
+++ b/src/video/quartz/SDL_QuartzVideo.m Mon Jan 02 21:25:34 2012 -0800
@@ -1149,9 +1149,8 @@
}
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 @@
}
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);