Enabling highdpi mode on an iPhone 6 Plus should now create a 1080x1920 OpenGL view, rather than 1242x2208 (414x736@3x.) iOS-improvements
authorAlex Szpakowski <slime73@gmail.com>
Sun, 14 Sep 2014 17:04:54 -0300
branchiOS-improvements
changeset 9517 dbe19a0cad97
parent 9516 77867123589c
child 9518 4bd15ffec1ad
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
src/video/uikit/SDL_uikitopengles.m
--- a/src/video/uikit/SDL_uikitmodes.m	Wed Sep 10 18:10:37 2014 -0300
+++ b/src/video/uikit/SDL_uikitmodes.m	Sun Sep 14 17:04:54 2014 -0300
@@ -189,12 +189,19 @@
         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)) {
--- a/src/video/uikit/SDL_uikitopengles.m	Wed Sep 10 18:10:37 2014 -0300
+++ b/src/video/uikit/SDL_uikitopengles.m	Sun Sep 14 17:04:54 2014 -0300
@@ -121,11 +121,18 @@
         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) {