diff -r 84b0bc1bf399 -r d9d00e537010 hedgewars/uStore.pas --- a/hedgewars/uStore.pas Sun Jan 29 00:48:39 2012 +0100 +++ b/hedgewars/uStore.pas Sun Jan 29 02:45:12 2012 +0100 @@ -625,7 +625,8 @@ {$IFDEF SDL13} // this function creates an opengles1.1 context by default on mobile devices // use SDL_GL_SetAttribute to change this behaviour - SDLGLcontext:=SDL_GL_CreateContext(SDLwindow); + if SDLGLcontext = nil then + SDLGLcontext:= SDL_GL_CreateContext(SDLwindow); SDLTry(SDLGLcontext <> nil, true); SDL_GL_SetSwapInterval(1); {$ENDIF} @@ -710,15 +711,11 @@ {$ENDIF} // set view port to whole window - if (rotationQt = 0) or (rotationQt = 180) then - glViewport(0, 0, cScreenWidth, cScreenHeight) - else - glViewport(0, 0, cScreenHeight, cScreenWidth); + glViewport(0, 0, cScreenWidth, cScreenHeight) glMatrixMode(GL_MODELVIEW); // prepare default translation/scaling glLoadIdentity(); - glRotatef(rotationQt, 0, 0, 1); glScalef(2.0 / cScreenWidth, -2.0 / cScreenHeight, 1.0); glTranslatef(0, -cScreenHeight / 2, 0); @@ -747,7 +744,6 @@ begin glPushMatrix; // save default scaling glLoadIdentity; - glRotatef(rotationQt, 0, 0, 1); glScalef(f / cScreenWidth, -f / cScreenHeight, 1.0); glTranslatef(0, -cScreenHeight / 2, 0); end; @@ -997,15 +993,14 @@ cFullScreen:= s = '1'; AddFileLog('Preparing to change video parameters...'); -{$IFNDEF IPHONEOS} - {$IFDEF SDL13} +{$IFDEF SDL13} if SDLwindow = nil then - {$ELSE} +{$ELSE} if SDLPrimSurface = nil then - {$ENDIF} +{$ENDIF} begin // set window title - SDL_WM_SetCaption('Hedgewars', nil); + {$IFNDEF SDL13}SDL_WM_SetCaption('Hedgewars', nil);{$ENDIF} WriteToConsole('Init SDL_image... '); SDLTry(IMG_Init(IMG_INIT_PNG) <> 0, true); WriteLnToConsole(msgOK); @@ -1023,6 +1018,17 @@ end else begin +{$IFDEF IPHONEOS} + // chFullScr is called when there is a rotation event and needs the SetScale and SetupOpenGL to set up the new resolution + // this 6 gl functions are the relevant ones and are hacked together here for optimisation + glMatrixMode(GL_MODELVIEW); + glPopMatrix; + glLoadIdentity(); + glScalef(2.0 / cScreenWidth, -2.0 / cScreenHeight, 1.0); + glTranslatef(0, -cScreenHeight / 2, 0); + glViewport(0, 0, cScreenWidth, cScreenHeight); + exit; +{$ELSE} SetScale(cDefaultZoomLevel); {$IF DEFINED(DARWIN) OR DEFINED(WIN32) or DEFINED(ANDROID)} reinit:= true; @@ -1034,8 +1040,8 @@ AddFileLog('Freeing old primary surface...'); SDL_FreeSurface(SDLPrimSurface); SDLPrimSurface:= nil; +{$ENDIF} end; -{$ENDIF} // these attributes must be set up before creating the sdl window {$IFNDEF WIN32} @@ -1056,7 +1062,10 @@ x:= x or (SDL_GetNumVideoDisplays() - 1); y:= y or (SDL_GetNumVideoDisplays() - 1); - SDL_SetHint('SDL_IOS_ORIENTATIONS','LandscapeLeft LandscapeRight'); + if isPhone() then + SDL_SetHint('SDL_IOS_ORIENTATIONS','LandscapeLeft LandscapeRight'); + + // on mobile the SDL_WINDOW_RESIZABLE makes the window respond to rotation events flags:= flags or SDL_WINDOW_BORDERLESS or SDL_WINDOW_RESIZABLE; {$ENDIF} @@ -1112,7 +1121,6 @@ SDLPrimSurface:= nil; - rotationQt:= 0; cScaleFactor:= 2.0; Step:= 0; ProgrTex:= nil;