Browse Source

Enabling highdpi mode on an iPhone 6 Plus should now create a 1080x1920 OpenGL view, rather than 1242x2208 (414x736@3x.)

Alex Szpakowski 10 years ago
parent
commit
ba565622aa
2 changed files with 23 additions and 9 deletions
  1. 12 5
      src/video/uikit/SDL_uikitmodes.m
  2. 11 4
      src/video/uikit/SDL_uikitopengles.m

+ 12 - 5
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)) {

+ 11 - 4
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) {