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

main
Alex Szpakowski 2014-09-14 17:04:54 -03:00
parent 3071128deb
commit ba565622aa
2 changed files with 23 additions and 9 deletions

View File

@ -189,12 +189,19 @@ UIKit_GetDisplayModes(_THIS, SDL_VideoDisplay * display)
SDL_bool addRotation = (data.uiscreen == [UIScreen mainScreen]); SDL_bool addRotation = (data.uiscreen == [UIScreen mainScreen]);
CGFloat scale = data.uiscreen.scale; 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]) { for (UIScreenMode *uimode in [data.uiscreen availableModes]) {
/* The size of a UIScreenMode is in pixels, but we deal exclusively in /* The size of a UIScreenMode is in pixels, but we deal exclusively
* points (except in SDL_GL_GetDrawableSize.) */ * in points (except in SDL_GL_GetDrawableSize.) */
CGSize size = [uimode size]; int w = (int)(uimode.size.width / scale);
int w = (int)(size.width / scale); int h = (int)(uimode.size.height / scale);
int h = (int)(size.height / scale);
/* Make sure the width/height are oriented correctly */ /* Make sure the width/height are oriented correctly */
if (isLandscape != (w > h)) { if (isLandscape != (w > h)) {

View File

@ -121,12 +121,19 @@ UIKit_GL_CreateContext(_THIS, SDL_Window * window)
CGFloat scale = 1.0; CGFloat scale = 1.0;
if (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) { if (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) {
/* Set the scale to the natural scale factor of the screen - the backing /* Set the scale to the natural scale factor of the screen - the
dimensions of the OpenGL view will match the pixel dimensions of the backing dimensions of the OpenGL view will match the pixel
screen rather than the dimensions in points. dimensions of the screen rather than the dimensions in points.
*/ */
#ifdef __IPHONE_8_0
if ([uiwindow.screen respondsToSelector:@selector(nativeScale)]) {
scale = uiwindow.screen.nativeScale;
} else
#endif
{
scale = uiwindow.screen.scale; scale = uiwindow.screen.scale;
} }
}
if (_this->gl_config.share_with_current_context) { if (_this->gl_config.share_with_current_context) {
EAGLContext *context = (__bridge EAGLContext *) SDL_GL_GetCurrentContext(); EAGLContext *context = (__bridge EAGLContext *) SDL_GL_GetCurrentContext();