From ba565622aadd7043757a4f704a6779558292a281 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Sun, 14 Sep 2014 17:04:54 -0300 Subject: [PATCH] Enabling highdpi mode on an iPhone 6 Plus should now create a 1080x1920 OpenGL view, rather than 1242x2208 (414x736@3x.) --- src/video/uikit/SDL_uikitmodes.m | 17 ++++++++++++----- src/video/uikit/SDL_uikitopengles.m | 15 +++++++++++---- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/video/uikit/SDL_uikitmodes.m b/src/video/uikit/SDL_uikitmodes.m index 37792f1af..26858a825 100644 --- a/src/video/uikit/SDL_uikitmodes.m +++ b/src/video/uikit/SDL_uikitmodes.m @@ -189,12 +189,19 @@ UIKit_GetDisplayModes(_THIS, SDL_VideoDisplay * display) SDL_bool addRotation = (data.uiscreen == [UIScreen mainScreen]); CGFloat scale = data.uiscreen.scale; +#ifdef __IPHONE_8_0 + /* The UIScreenMode of an iPhone 6 Plus should be 1080x1920 rather than + * 1242x2208 (414x736@3x), so we should use the native scale. */ + if ([data.uiscreen respondsToSelector:@selector(nativeScale)]) { + scale = data.uiscreen.nativeScale; + } +#endif + for (UIScreenMode *uimode in [data.uiscreen availableModes]) { - /* The size of a UIScreenMode is in pixels, but we deal exclusively in - * points (except in SDL_GL_GetDrawableSize.) */ - CGSize size = [uimode size]; - int w = (int)(size.width / scale); - int h = (int)(size.height / scale); + /* The size of a UIScreenMode is in pixels, but we deal exclusively + * in points (except in SDL_GL_GetDrawableSize.) */ + int w = (int)(uimode.size.width / scale); + int h = (int)(uimode.size.height / scale); /* Make sure the width/height are oriented correctly */ if (isLandscape != (w > h)) { diff --git a/src/video/uikit/SDL_uikitopengles.m b/src/video/uikit/SDL_uikitopengles.m index 378099d8e..cb9beaa5b 100644 --- a/src/video/uikit/SDL_uikitopengles.m +++ b/src/video/uikit/SDL_uikitopengles.m @@ -121,11 +121,18 @@ UIKit_GL_CreateContext(_THIS, SDL_Window * window) CGFloat scale = 1.0; if (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) { - /* Set the scale to the natural scale factor of the screen - the backing - dimensions of the OpenGL view will match the pixel dimensions of the - screen rather than the dimensions in points. + /* Set the scale to the natural scale factor of the screen - the + backing dimensions of the OpenGL view will match the pixel + dimensions of the screen rather than the dimensions in points. */ - scale = uiwindow.screen.scale; +#ifdef __IPHONE_8_0 + if ([uiwindow.screen respondsToSelector:@selector(nativeScale)]) { + scale = uiwindow.screen.nativeScale; + } else +#endif + { + scale = uiwindow.screen.scale; + } } if (_this->gl_config.share_with_current_context) {