Skip to content
Permalink
Browse files

Quartz: Restore 1.2.14 behaviour of letting apps draw from background…

… thread.

Strictly speaking, this isn't encouraged, but it's a regression.
  • Loading branch information
icculus committed Jan 3, 2012
1 parent af90e20 commit 6a9ef50e5004044f7d49386c02443786d833c4ea
Showing with 10 additions and 5 deletions.
  1. +2 −0 src/video/quartz/SDL_QuartzVideo.h
  2. +8 −5 src/video/quartz/SDL_QuartzVideo.m
@@ -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)
@@ -1149,9 +1149,8 @@ other blitting while waiting on the VBL (and hence results in higher framerates)
}

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);

0 comments on commit 6a9ef50

Please sign in to comment.