Skip to content

Commit

Permalink
Enabling highdpi mode on an iPhone 6 Plus should now create a 1080x19…
Browse files Browse the repository at this point in the history
…20 OpenGL view, rather than 1242x2208 (414x736@3x.)
  • Loading branch information
slime73 committed Sep 14, 2014
1 parent 3071128 commit ba56562
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 9 deletions.
17 changes: 12 additions & 5 deletions src/video/uikit/SDL_uikitmodes.m
Expand Up @@ -189,12 +189,19 @@ @implementation SDL_DisplayModeData
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)) {
Expand Down
15 changes: 11 additions & 4 deletions src/video/uikit/SDL_uikitopengles.m
Expand Up @@ -121,11 +121,18 @@ void UIKit_GL_SwapWindow(_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) {
Expand Down

0 comments on commit ba56562

Please sign in to comment.