Quartz: Restore 1.2.14 behaviour of letting apps draw from background thread. SDL-1.2
authorRyan C. Gordon <icculus@icculus.org>
Mon, 02 Jan 2012 21:25:34 -0800
branchSDL-1.2
changeset 6157 8a1bc41db6bb
parent 6155 894b6e3637c7
child 6158 6f3a2bb301d6
Quartz: Restore 1.2.14 behaviour of letting apps draw from background thread. Strictly speaking, this isn't encouraged, but it's a regression.
src/video/quartz/SDL_QuartzVideo.h
src/video/quartz/SDL_QuartzVideo.m
--- 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);