# HG changeset patch # User koda # Date 1304037766 -7200 # Node ID b01ab1ef01fb05373c5adf5ab6545e224560cd6b # Parent a05c14510c8a247f751e18023d51053b4cd6313f make sdl1.3 window creation code more readable diff -r a05c14510c8a -r b01ab1ef01fb hedgewars/SDLh.pas --- a/hedgewars/SDLh.pas Thu Apr 28 01:01:07 2011 +0200 +++ b/hedgewars/SDLh.pas Fri Apr 29 02:42:46 2011 +0200 @@ -767,16 +767,17 @@ function SDL_CreateRenderer(window: PSDL_Window; index, flags: LongInt): PSDL_Renderer; cdecl; external SDLLibName; function SDL_DestroyRenderer(renderer: PSDL_Renderer): LongInt; cdecl; external SDLLibName; function SDL_DestroyWindow(window: PSDL_Window): LongInt; cdecl; external SDLLibName; -function SDL_GetRenderer(window: PSDL_Window): PSDL_Renderer; cdecl; external SDLLibName; procedure SDL_VideoQuit; cdecl; external SDLLibName; function SDL_GetNumVideoDisplays: LongInt; cdecl; external SDLLibName; function SDL_SetRenderDrawColor(renderer: PSDL_Renderer; r,g,b,a: byte): LongInt; cdecl; external SDLLibName; +function SDL_GetRenderer(window: PSDL_Window): PSDL_Renderer; cdecl; external SDLLibName; function SDL_RenderFillRect(renderer: PSDL_Renderer; rect: PSDL_Rect): LongInt; cdecl; external SDLLibName; function SDL_RenderClear(renderer: PSDL_Renderer): LongInt; cdecl; external SDLLibName; procedure SDL_RenderPresent(renderer: PSDL_Renderer); cdecl; external SDLLibName; function SDL_RenderReadPixels(renderer: PSDL_Renderer; rect: PSDL_Rect; format: LongInt; pixels: pointer; pitch: LongInt): LongInt; cdecl; external SDLLibName; +function SDL_RenderSetViewport(window: PSDL_Window; rect: PSDL_Rect): LongInt; cdecl; external SDLLibName; function SDL_SelectMouse(index: LongInt): LongInt; cdecl; external SDLLibName; function SDL_GetRelativeMouseState(x, y: PLongInt): Byte; cdecl; external SDLLibName; diff -r a05c14510c8a -r b01ab1ef01fb hedgewars/uStore.pas --- a/hedgewars/uStore.pas Thu Apr 28 01:01:07 2011 +0200 +++ b/hedgewars/uStore.pas Fri Apr 29 02:42:46 2011 +0200 @@ -510,7 +510,7 @@ {$IFNDEF IPHONEOS} var vendor: shortstring; {$IFDEF DARWIN} -const one = 1; +const one : LongInt = 1; {$ENDIF} {$ENDIF} begin @@ -523,7 +523,7 @@ vendor:= LowerCase(shortstring(pchar(glGetString(GL_VENDOR)))); {$IFNDEF SDL13} // this attribute is default in 1.3 and must be enabled in MacOSX - SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, ((cReducedQuality and rqDesyncVBlank) = 0)) + SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, LongInt((cReducedQuality and rqDesyncVBlank) = 0)); {$IFDEF DARWIN} // fixes vsync in Snow Leopard @@ -921,22 +921,32 @@ end; {$IFDEF SDL13} - if SDLwindow = nil then - begin - // the values in x and y make the window appear in the center - // on ios, make the sdl window appear on the second monitor when present - x:= (SDL_WINDOWPOS_CENTERED_MASK or {$IFDEF IPHONEOS}(SDL_GetNumVideoDisplays() - 1){$ELSE}0{$ENDIF}); - y:= (SDL_WINDOWPOS_CENTERED_MASK or {$IFDEF IPHONEOS}(SDL_GetNumVideoDisplays() - 1){$ELSE}0{$ENDIF}); - SDLwindow:= SDL_CreateWindow('Hedgewars', x, y, cScreenWidth, cScreenHeight, SDL_WINDOW_OPENGL or SDL_WINDOW_SHOWN - {$IFDEF IPHONEOS} or SDL_WINDOW_BORDERLESS {$ENDIF}); // do not set SDL_WINDOW_RESIZABLE on iOS - SDLrender:= SDL_CreateRenderer(SDLwindow, -1, SDL_RENDERER_ACCELERATED or SDL_RENDERER_PRESENTVSYNC); - end; + // these values in x and y make the window appear in the center + x:= SDL_WINDOWPOS_CENTERED_MASK; + y:= SDL_WINDOWPOS_CENTERED_MASK; + flags:= SDL_WINDOW_OPENGL or SDL_WINDOW_SHOWN; + +{$IFDEF IPHONEOS} + // make the sdl window appear on the second monitor when present + x:= x or (SDL_GetNumVideoDisplays() - 1); + y:= y or (SDL_GetNumVideoDisplays() - 1); + // hardcode the opengles driver as we do our own drawing + SDL_SetHint('SDL_RENDER_DRIVER','opengles'); + flags:= flags or SDL_WINDOW_BORDERLESS; // do not set SDL_WINDOW_RESIZABLE on iOS +{$ENDIF} + + SDLwindow:= SDL_CreateWindow('Hedgewars', x, y, cScreenWidth, cScreenHeight, flags); + SDLTry(SDLwindow <> nil, true); + SDLrender:= SDL_CreateRenderer(SDLwindow, -1, SDL_RENDERER_ACCELERATED or SDL_RENDERER_PRESENTVSYNC); + SDLTry(SDLrender <> nil, true); + + // clean the renderer before using it SDL_SetRenderDrawColor(SDLrender, 0, 0, 0, 255); SDL_RenderClear(SDLrender); SDL_RenderPresent(SDLrender); - // we need to reset the gl context from the one created by SDL as we have our own drawing system + // reset the gl context from the one created by SDL (as we have our own drawing system) glMatrixMode(GL_PROJECTION); glLoadIdentity(); {$ELSE}