From fcb77f9848f716e84e983f2d22099e30eea5b661 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 8 Nov 2017 14:17:23 -0800 Subject: [PATCH] Back out the following commits which are causing Dota 2 Exclusive Fullscreen to fail on AMD-based Macs. The details of why this is being reverted are at: https://bugzilla.libsdl.org/show_bug.cgi?id=3949 Alex Szpakowski 2017-07-12 21:28 -0300 macOS: Expose more display modes on retina screens. Fixes an issue found in BZFlag. http://hg.libsdl.org/SDL/rev/cfb3ddf796c3 Alex Szpakowski 2017-07-12 21:32 -0300 Fix a potential crash in macOS 10.7 and earlier. http://hg.libsdl.org/SDL/rev/4941c8867075 --- src/video/cocoa/SDL_cocoamodes.m | 71 ++++---------------------------- 1 file changed, 8 insertions(+), 63 deletions(-) diff --git a/src/video/cocoa/SDL_cocoamodes.m b/src/video/cocoa/SDL_cocoamodes.m index 592367acaa033..c8c0322fde234 100644 --- a/src/video/cocoa/SDL_cocoamodes.m +++ b/src/video/cocoa/SDL_cocoamodes.m @@ -100,47 +100,15 @@ } static SDL_bool -GetDisplayMode(_THIS, CGDisplayModeRef vidmode, CFArrayRef modelist, CVDisplayLinkRef link, SDL_DisplayMode *mode) +GetDisplayMode(_THIS, CGDisplayModeRef vidmode, CVDisplayLinkRef link, SDL_DisplayMode *mode) { SDL_DisplayModeData *data; - int width = (int) CGDisplayModeGetWidth(vidmode); - int height = (int) CGDisplayModeGetHeight(vidmode); + int width = 0; + int height = 0; int bpp = 0; int refreshRate = 0; CFStringRef fmt; - /* Ignore this mode if it's low-dpi (@1x) and we have a high-dpi mode in the - * list with the same size in points. - */ -#ifdef MAC_OS_X_VERSION_10_8 - if (modelist != NULL && floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_7) { - int pixelW = (int) CGDisplayModeGetPixelWidth(vidmode); - int pixelH = (int) CGDisplayModeGetPixelHeight(vidmode); - - if (width == pixelW && height == pixelH) { - CFIndex modescount = CFArrayGetCount(modelist); - - for (int i = 0; i < modescount; i++) { - CGDisplayModeRef othermode = (CGDisplayModeRef) CFArrayGetValueAtIndex(modelist, i); - - if (CFEqual(vidmode, othermode)) { - continue; - } - - int otherW = (int) CGDisplayModeGetWidth(othermode); - int otherH = (int) CGDisplayModeGetHeight(othermode); - - int otherpixelW = (int) CGDisplayModeGetPixelWidth(othermode); - int otherpixelH = (int) CGDisplayModeGetPixelHeight(othermode); - - if (width == otherW && height == otherH && (otherpixelW != otherW || otherpixelH != otherH)) { - return SDL_FALSE; - } - } - } - } -#endif - data = (SDL_DisplayModeData *) SDL_malloc(sizeof(*data)); if (!data) { return SDL_FALSE; @@ -148,6 +116,8 @@ data->moderef = vidmode; fmt = CGDisplayModeCopyPixelEncoding(vidmode); + width = (int) CGDisplayModeGetWidth(vidmode); + height = (int) CGDisplayModeGetHeight(vidmode); refreshRate = (int) (CGDisplayModeGetRefreshRate(vidmode) + 0.5); if (CFStringCompare(fmt, CFSTR(IO32BitDirectPixels), @@ -273,7 +243,7 @@ SDL_zero(display); /* this returns a stddup'ed string */ display.name = (char *)Cocoa_GetDisplayName(displays[i]); - if (!GetDisplayMode(_this, moderef, NULL, link, &mode)) { + if (!GetDisplayMode(_this, moderef, link, &mode)) { CVDisplayLinkRelease(link); CGDisplayModeRelease(moderef); SDL_free(display.name); @@ -370,32 +340,7 @@ Cocoa_GetDisplayModes(_THIS, SDL_VideoDisplay * display) { SDL_DisplayData *data = (SDL_DisplayData *) display->driverdata; - CFDictionaryRef dict = NULL; - CFArrayRef modes; - - /* By default, CGDisplayCopyAllDisplayModes will only get a subset of the - * system's available modes. For example on a 15" 2016 MBP, users can - * choose 1920x1080@2x in System Preferences but it won't show up here, - * unless we specify the option below. - */ -#ifdef MAC_OS_X_VERSION_10_8 - if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_7) { - const CFStringRef dictkeys[] = {kCGDisplayShowDuplicateLowResolutionModes}; - const CFBooleanRef dictvalues[] = {kCFBooleanTrue}; - dict = CFDictionaryCreate(NULL, - (const void **)dictkeys, - (const void **)dictvalues, - 1, - &kCFCopyStringDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks); - } -#endif - - modes = CGDisplayCopyAllDisplayModes(data->display, dict); - - if (dict != NULL) { - CFRelease(dict); - } + CFArrayRef modes = CGDisplayCopyAllDisplayModes(data->display, NULL); if (modes) { CVDisplayLinkRef link = NULL; @@ -407,7 +352,7 @@ for (i = 0; i < count; i++) { CGDisplayModeRef moderef = (CGDisplayModeRef) CFArrayGetValueAtIndex(modes, i); SDL_DisplayMode mode; - if (GetDisplayMode(_this, moderef, modes, link, &mode)) { + if (GetDisplayMode(_this, moderef, link, &mode)) { CGDisplayModeRetain(moderef); SDL_AddDisplayMode(display, &mode); }