From 3315ad7871b14a6ce3e76de34e63dcccd7788789 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Sat, 4 Jun 2011 15:33:50 -0400 Subject: [PATCH] QZ_LockHWSurface() should always check for changes to the screen surface. Apparently these pointers can change if the user has multiple displays and moves a window between them, and probably other similar cases. Thanks to Kirk Baker for the patch! --- src/video/quartz/SDL_QuartzVideo.m | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/video/quartz/SDL_QuartzVideo.m b/src/video/quartz/SDL_QuartzVideo.m index d2d2169ff..73a71d0ce 100644 --- a/src/video/quartz/SDL_QuartzVideo.m +++ b/src/video/quartz/SDL_QuartzVideo.m @@ -1249,6 +1249,16 @@ static int QZ_FillHWRect (_THIS, SDL_Surface *dst, SDL_Rect *rect, Uint32 color static int QZ_LockHWSurface(_THIS, SDL_Surface *surface) { + /* + * Always get latest bitmap address and rowbytes for the screen surface; + * they can change dynamically (user has multiple monitors, etc). + */ + if (surface == SDL_VideoSurface) { + surface->pixels = (void*) CGDisplayBaseAddress (kCGDirectMainDisplay); + surface->pitch = CGDisplayBytesPerRow (kCGDirectMainDisplay); + return (surface->pixels != NULL); + } + return 1; }