# HG changeset patch # User koda # Date 1263624536 0 # Node ID 75880595a9f1ab0a3ef807401b257c580e8508b2 # Parent 41aa7b56c17b655da805027df8b550323bd96b27 code cleanup and opengles optimizations diff -r 41aa7b56c17b -r 75880595a9f1 cocoaTouch/GameSetup.m --- a/cocoaTouch/GameSetup.m Fri Jan 15 10:03:31 2010 +0000 +++ b/cocoaTouch/GameSetup.m Sat Jan 16 06:48:56 2010 +0000 @@ -27,7 +27,7 @@ } -(void) dealloc { - [self.systemSettings release]; + if (systemSettings) [self.systemSettings release]; [self.localeString autorelease]; [super dealloc]; } @@ -84,7 +84,8 @@ /* This check the sd if there is a pending connection. * If there is one, accept that, and open a new socket for communicating */ - if ((csd = SDLNet_TCP_Accept(sd))) { + csd = SDLNet_TCP_Accept(sd); + if (NULL != csd) { NSLog(@"engineProtocol - Client found"); @@ -175,7 +176,7 @@ clientQuit = NO; } else { - NSLog(@"engineProtocolThread - wrong message, closing connection"); + NSLog(@"engineProtocolThread - wrong message or client closed connection"); clientQuit = YES; } @@ -226,12 +227,15 @@ // empty packet or just statistics break; // missing case for exiting right away - } + } } + NSLog(@"Client Exited"); + // wait a little to let the client close cleanly + sleep(5); + // Close the client socket + SDLNet_TCP_Close(csd); } - - /* Close the client socket */ - SDLNet_TCP_Close(csd); + } SDLNet_TCP_Close(sd); @@ -258,10 +262,7 @@ } -(void) unloadSettings { - for (id obj in self) - if ([obj isKindOfClass:[NSDictionary class]]) { - [obj release]; - } + [systemSettings dealloc]; } -(void) setArgsForLocalPlay { diff -r 41aa7b56c17b -r 75880595a9f1 cocoaTouch/SDLOverrides/SDL_uikitappdelegate.m --- a/cocoaTouch/SDLOverrides/SDL_uikitappdelegate.m Fri Jan 15 10:03:31 2010 +0000 +++ b/cocoaTouch/SDLOverrides/SDL_uikitappdelegate.m Sat Jan 16 06:48:56 2010 +0000 @@ -91,12 +91,12 @@ [setup loadSettingsFromFile:@"settings.plist" forKey:@"systemSettings"]; // remove the current view to free resources - [UIView beginAnimations:nil context:NULL]; +/* [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:1.5]; - controller.view.alpha = 0; + controller.view.alpha = 1; [UIView commitAnimations]; [controller.view performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1.5]; - +*/ NSLog(@"Game is launching..."); [NSThread detachNewThreadSelector:@selector(launchSDL_main) toTarget:self withObject:nil]; diff -r 41aa7b56c17b -r 75880595a9f1 cocoaTouch/SDLOverrides/SDL_uikitview.h --- a/cocoaTouch/SDLOverrides/SDL_uikitview.h Fri Jan 15 10:03:31 2010 +0000 +++ b/cocoaTouch/SDLOverrides/SDL_uikitview.h Sat Jan 16 06:48:56 2010 +0000 @@ -36,7 +36,7 @@ // constants for telling which input has been received #define kMinimumPinchDelta 100 -#define kMinimumGestureLength 20 +#define kMinimumGestureLength 10 #define kMaximumVariance 4 /* *INDENT-OFF* */ diff -r 41aa7b56c17b -r 75880595a9f1 cocoaTouch/otherSrc/PascalImports.h --- a/cocoaTouch/otherSrc/PascalImports.h Fri Jan 15 10:03:31 2010 +0000 +++ b/cocoaTouch/otherSrc/PascalImports.h Sat Jan 16 06:48:56 2010 +0000 @@ -20,6 +20,8 @@ int HW_protoVer(void); + void Game(void); + void HW_click(void); void HW_zoomIn(void); void HW_zoomOut(void); diff -r 41aa7b56c17b -r 75880595a9f1 hedgewars/CCHandlers.inc --- a/hedgewars/CCHandlers.inc Fri Jan 15 10:03:31 2010 +0000 +++ b/hedgewars/CCHandlers.inc Sat Jan 16 06:48:56 2010 +0000 @@ -598,67 +598,59 @@ {$IFDEF DEBUGFILE} buf: array[byte] of char; {$ENDIF} +{$IFDEF SDL13} + windowID: TSDL_WindowID; +{$ENDIF} begin -if Length(s) = 0 then cFullScreen:= not cFullScreen + if Length(s) = 0 then cFullScreen:= not cFullScreen else cFullScreen:= s = '1'; {$IFDEF DEBUGFILE} -AddFileLog('Prepare to change video parameters...'); + AddFileLog('Prepare to change video parameters...'); {$ENDIF} + flags:= SDL_OPENGL;// or SDL_RESIZABLE; {$IFDEF IPHONEOS} -SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 0); -SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 1); -SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0); -SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); -SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); -SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); -SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); -SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32); -{$ELSE} -SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); -{$ENDIF} - -{$IFNDEF SDL13} -// this attribute is default in 1.3 and must be enabled in MacOSX -{$IFNDEF DARWIN} -if cVSyncInUse then -{$ENDIF} - SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1); + // remove the topbar from the iPhone + flags:= flags or SDL_NOFRAME; {$ENDIF} -flags:= SDL_OPENGL;// or SDL_RESIZABLE; -{$IFDEF IPHONEOS} -// remove the topbar from the iPhone -flags:= flags or SDL_NOFRAME; -{$ENDIF} - -if cFullScreen then + if cFullScreen then begin - flags:= flags or SDL_FULLSCREEN; - cScreenWidth:= cInitWidth; - cScreenHeight:= cInitHeight + flags:= flags or SDL_FULLSCREEN; + cScreenWidth:= cInitWidth; + cScreenHeight:= cInitHeight end; -SDL_WM_SetCaption('Hedgewars', nil); -if SDLPrimSurface <> nil then + SDL_WM_SetCaption('Hedgewars', nil); + if SDLPrimSurface <> nil then begin - {$IFDEF DEBUGFILE} - AddFileLog('Freeing old primary surface...'); - {$ENDIF} - SDL_FreeSurface(SDLPrimSurface); +{$IFDEF DEBUGFILE} + AddFileLog('Freeing old primary surface...'); +{$ENDIF} + SDL_FreeSurface(SDLPrimSurface); end; - -SDLPrimSurface:= SDL_SetVideoMode(cScreenWidth, cScreenHeight, cBits, flags); -SDLTry(SDLPrimSurface <> nil, true); -PixelFormat:= SDLPrimSurface^.format; + +{$IFDEF SDL13} + windowID:= SDL_CreateWindow(nil, 0, 0, cScreenWidth, cScreenHeight, SDL_WINDOW_OPENGL or SDL_WINDOW_SHOWN + {$IFDEF IPHONEOS} or SDL_WINDOW_BORDERLESS{$ENDIF}); + SDL_CreateRenderer(windowID, 0, 0); + PixelFormat:=nil;// SDLPrimSurface^.format; + + SDL_SetRenderDrawColor(0, 0, 0, 255); + SDL_RenderFill(nil); + SDL_RenderPresent(); +{$ELSE} + SDLPrimSurface:= SDL_SetVideoMode(cScreenWidth, cScreenHeight, cBits, flags); + SDLTry(SDLPrimSurface <> nil, true); + PixelFormat:= SDLPrimSurface^.format; +{$ENDIF} {$IFDEF DEBUGFILE} -AddFileLog('Setting up OpenGL...'); -AddFileLog('SDL video driver: ' + string(SDL_VideoDriverName(buf, sizeof(buf)))); + AddFileLog('Setting up OpenGL...'); + AddFileLog('SDL video driver: ' + string(SDL_VideoDriverName(buf, sizeof(buf)))); {$ENDIF} -SetupOpenGL(); - + SetupOpenGL(); end; procedure chVol_p(var s: shortstring); diff -r 41aa7b56c17b -r 75880595a9f1 hedgewars/SDLh.pas --- a/hedgewars/SDLh.pas Fri Jan 15 10:03:31 2010 +0000 +++ b/hedgewars/SDLh.pas Sat Jan 16 06:48:56 2010 +0000 @@ -175,6 +175,21 @@ AMask = $000000FF; {$ENDIF} +{$IFDEF SDL13} +// SDL_WindowFlags (enum) + SDL_WINDOW_FULLSCREEN = $00000001; //*< fullscreen window, implies borderless */ + SDL_WINDOW_OPENGL = $00000002; //*< window usable with OpenGL context */ + SDL_WINDOW_SHOWN = $00000004; //*< window is visible */ + SDL_WINDOW_BORDERLESS = $00000008; //*< no window decoration */ + SDL_WINDOW_RESIZABLE = $00000010; //*< window can be resized */ + SDL_WINDOW_MINIMIZED = $00000020; //*< window is minimized */ + SDL_WINDOW_MAXIMIZED = $00000040; //*< window is maximized */ + SDL_WINDOW_INPUT_GRABBED = $00000100; //*< window has grabbed input focus */ + SDL_WINDOW_INPUT_FOCUS = $00000200; //*< window has input focus */ + SDL_WINDOW_MOUSE_FOCUS = $00000400; //*< window has mouse focus */ + SDL_WINDOW_FOREIGN = $00000800; //*< window not created by SDL */ +{$ENDIF} + {* SDL_mixer *} MIX_MAX_VOLUME = 128; MIX_INIT_FLAC = $00000001; @@ -313,7 +328,8 @@ {$IFDEF SDL13} TSDL_WindowID = LongInt; - + TSDL_TextureID = LongInt; + TSDL_WindowEvent = record type_: byte; gain: byte; @@ -610,9 +626,21 @@ function SDL_SaveBMP_RW(surface: PSDL_Surface; dst: PSDL_RWops; freedst: LongInt): LongInt; cdecl; external SDLLibName; {$IFDEF SDL13} +function SDL_CreateWindow(title: PChar; x,y,w,h, flags: LongInt): TSDL_WindowID; cdecl; external SDLLibName; +function SDL_CreateRenderer(windowID: TSDL_WindowID; index, flags: LongInt): LongInt; cdecl; external SDLLibName; +function SDL_SetRenderDrawColor(r,g,b,a: byte): LongInt; cdecl; external SDLLibName; +function SDL_RenderFill(rect: PSDL_Rect): LongInt; +function SDL_RenderFillRect(rect: PSDL_Rect): LongInt; cdecl; external SDLLibName; +function SDL_RenderClear: LongInt; cdecl; external SDLLibName; +procedure SDL_RenderPresent; cdecl; external SDLLibName; +function SDL_RenderCopy(textureID: TSDL_TextureID; srcrect, dstrect: PSDL_Rect): LongInt; cdecl; external SDLLibName; + +function SDL_CreateTextureFromSurface(format: LongInt; surface: PSDL_Surface): TSDL_TextureID; cdecl; external SDLLibName; +procedure SDL_DestroyTexture(textureID: TSDL_TextureID); cdecl; external SDLLibName; + function SDL_GetKeyboardState(numkeys: PLongInt): PByteArray; cdecl; external SDLLibName; function SDL_SelectMouse(index: LongInt): LongInt; cdecl; external SDLLibName; -function SDL_GetRelativeMouseState(index: LongInt; x, y: PLongInt): Byte; cdecl; external SDLLibName; +function SDL_GetRelativeMouseState(x, y: PLongInt): Byte; cdecl; external SDLLibName; function SDL_GetNumMice: LongInt; cdecl; external SDLLibName; function SDL_PixelFormatEnumToMasks(format: TSDL_ArrayByteOrder; bpp: PLongInt; Rmask, Gmask, Bmask, Amask: PLongInt): boolean; cdecl; external SDLLibName; {$ELSE} @@ -767,5 +795,15 @@ (PByteArray(buf)^[0] shl 24) end; +{$IFDEF SDL13} +function SDL_RenderFill(rect: PSDL_Rect): LongInt; +var res: LongInt; +begin + if (rect <> nil) then res:= SDL_RenderFillRect(rect) + else res:= SDL_RenderClear(); + exit(res); +end; +{$ENDIF} + end. diff -r 41aa7b56c17b -r 75880595a9f1 hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Fri Jan 15 10:03:31 2010 +0000 +++ b/hedgewars/hwengine.pas Sat Jan 16 06:48:56 2010 +0000 @@ -480,7 +480,6 @@ TryDo(InitStepsFlags = cifAllInited, 'Some parameters not set (flags = ' + inttostr(InitStepsFlags) + ')', true); MainLoop; -ControllerClose(); end; ///////////////////////// diff -r 41aa7b56c17b -r 75880595a9f1 hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Fri Jan 15 10:03:31 2010 +0000 +++ b/hedgewars/uConsts.pas Sat Jan 16 06:48:56 2010 +0000 @@ -32,6 +32,9 @@ {$INCLUDE "proto.inc"} +// typed const is a variable despite const qualifier +// in freepascal you may actually use var for the same purpose + type TGameState = (gsLandGen, gsStart, gsGame, gsChat, gsConfirm, gsExit); @@ -162,7 +165,7 @@ errmsgIncorrectUse = 'Incorrect use'; errmsgShouldntRun = 'This program shouldn''t be run manually'; errmsgWrongNumber = 'Wrong parameters number'; - errmsgSlotsOverflow = 'CurSlot overflowed'; + errmsgSlotsOverflow = 'CurSlot overflowed'; msgLoading = 'Loading '; msgOK = 'ok'; @@ -408,7 +411,28 @@ 'Sounds/voices', // ptVoices 'Graphics/Hats' // ptHats ); - + (* + PathzBackup: array[TPathType] of String = ( + '', // ptNone + '', // ptData + 'Graphics', // ptGraphics + 'Themes', // ptThemes + 'Themes/avematan', // ptCurrTheme + 'Teams', // ptTeams + 'Maps', // ptMaps + '', // ptMapCurrent + 'Demos', // ptDemos + 'Sounds', // ptSounds + 'Graphics/Graves', // ptGraves + 'Fonts', // ptFonts + 'Forts', // ptForts + 'Locale', // ptLocale + 'Graphics/AmmoMenu', // ptAmmoMenu + 'Graphics/Hedgehog', // ptHedgehog + 'Sounds/voices', // ptVoices + 'Graphics/Hats' // ptHats + ); + *) SpritesData: array[TSprite] of record FileName: String[14]; Path, AltPath: TPathType; diff -r 41aa7b56c17b -r 75880595a9f1 hedgewars/uMisc.pas --- a/hedgewars/uMisc.pas Fri Jan 15 10:03:31 2010 +0000 +++ b/hedgewars/uMisc.pas Sat Jan 16 06:48:56 2010 +0000 @@ -33,6 +33,10 @@ {$ENDIF} ; +type HwColor4f = record + r, g, b, a: byte + end; + var isCursorVisible : boolean = false; isTerminated : boolean = false; @@ -64,7 +68,7 @@ cScreenHeight : LongInt = 768; cInitWidth : LongInt = 1024; cInitHeight : LongInt = 768; - cVSyncInUse : boolean = true; + cVSyncInUse : boolean = true; cBits : LongInt = 32; cBitsStr : string[2] = '32'; cTagsMaskIndex : byte = Low(cTagsMasks); @@ -138,14 +142,12 @@ AttackBar: LongInt = 0; // 0 - none, 1 - just bar at the right-down corner, 2 - like in WWP i: LongInt; + + cWaterOpacity: byte = $80; + WaterColorArray: array[0..3] of HwColor4f; -type HwColor4f = record - r, g, b, a: byte - end; - -var cWaterOpacity: byte = $80; - -var WaterColorArray: array[0..3] of HwColor4f; + CursorPoint: TPoint; + TargetPoint: TPoint = (X: NoPointX; Y: 0); procedure movecursor(dx, dy: Integer); function hwSign(r: hwFloat): LongInt; @@ -179,11 +181,8 @@ {$IFNDEF IPHONEOS} procedure MakeScreenshot(s: shortstring); {$ENDIF} - function modifyDamage(dmg: Longword): Longword; -var CursorPoint: TPoint; - TargetPoint: TPoint = (X: NoPointX; Y: 0); implementation uses uConsole, uStore, uIO, Math, uRandom, uSound; diff -r 41aa7b56c17b -r 75880595a9f1 hedgewars/uStore.pas --- a/hedgewars/uStore.pas Fri Jan 15 10:03:31 2010 +0000 +++ b/hedgewars/uStore.pas Sat Jan 16 06:48:56 2010 +0000 @@ -1004,11 +1004,6 @@ function LoadImage(const filename: string; imageFlags: LongInt): PSDL_Surface; var tmpsurf: PSDL_Surface; s: shortstring; -{$IFDEF DONTUSE} - tmpP: PLongWordArray; - tmpA, tmpR, tmpG, tmpB: LongWord; - i: LongInt; -{$ENDIF} begin WriteToConsole(msgLoading + filename + ' [flags: ' + inttostr(imageFlags) + ']... '); @@ -1054,52 +1049,6 @@ tmpsurf:= doSurfaceConversion(tmpsurf); -{$IFDEF DONTUSE} // way too slow -{* http://bugzilla.libsdl.org/show_bug.cgi?id=868 but patched library doesn't work on ipod, so implementing workaround here *} - if imageFlags and (ifAlpha or ifTransparent) > 0 then - begin - tmpP := tmpsurf^.pixels; - for i:= 0 to (tmpsurf^.pitch shr 2) * tmpsurf^.h - 1 do - begin -{$IFDEF ENDIAN_LITTLE} - tmpA:= tmpP^[i] shr 24 and $FF; - tmpR:= tmpP^[i] shr 16 and $FF; - tmpG:= tmpP^[i] shr 8 and $FF; - tmpB:= tmpP^[i] and $FF; -{$ELSE} - tmpA:= tmpP^[i] and $FF; - tmpR:= tmpP^[i] shr 8 and $FF; - tmpG:= tmpP^[i] shr 16 and $FF; - tmpB:= tmpP^[i] shr 24 and $FF; -{$ENDIF} - if tmpA <> 0 then - begin - tmpR:= round(tmpR * 255 / tmpA); - tmpG:= round(tmpG * 255 / tmpA); - tmpB:= round(tmpB * 255 / tmpA); - end; - - if tmpR > 255 then tmpR:= 255; - if tmpG > 255 then tmpG:= 255; - if tmpB > 255 then tmpB:= 255; - -{$IFDEF ENDIAN_LITTLE} - tmpP^[i]:= (tmpA shl 24) or (tmpR shl 16) or (tmpG shl 8) or tmpB; -{$ELSE} - tmpP^[i]:= (tmpA) or (tmpR shl 8) or (tmpG shl 16) or (tmpB shl 24); -{$ENDIF} - end; -(* for i:= 0 to (tmpsurf^.pitch shr 2) * tmpsurf^.h - 1 do - begin - tmpA:= tmpP^[i] shr 24 and $FF; - tmpR:= tmpP^[i] shr 16 and $FF; - tmpG:= tmpP^[i] shr 8 and $FF; - tmpB:= tmpP^[i] and $FF; - writeln(stdout, inttostr(tmpA) + ' | ' + inttostr(tmpR) + ' | ' + inttostr(tmpG)+ ' | ' + inttostr(tmpB)); - end; *) - end; -{$ENDIF} - if (imageFlags and ifTransparent) <> 0 then TryDo(SDL_SetColorKey(tmpsurf, SDL_SRCCOLORKEY, 0) = 0, errmsgTransparentSet, true); @@ -1125,19 +1074,45 @@ end; procedure SetupOpenGL; +{$IFDEF DEBUGFILE} var vendor: shortstring; +{$ENDIF} begin +{$IFDEF IPHONEOS} +//these are good performance savers, perhaps we could enable them by default + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 0); + SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 1); + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0); + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); + SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 0); + SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); + //SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32); +{$ELSE} + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); +{$ENDIF} + +{$IFNDEF SDL13} +// this attribute is default in 1.3 and must be enabled in MacOSX +{$IFNDEF DARWIN} + if cVSyncInUse then +{$ENDIF} + SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1); +{$ENDIF} + glGetIntegerv(GL_MAX_TEXTURE_SIZE, @MaxTextureSize); + +{$IFDEF DEBUGFILE} vendor:= LowerCase(string(pchar(glGetString(GL_VENDOR)))); -{$IFDEF DEBUGFILE} AddFileLog('OpenGL - Renderer: ' + string(pchar(glGetString(GL_RENDERER)))); AddFileLog(' |----- Vendor: ' + vendor); AddFileLog(' |----- Version: ' + string(pchar(glGetString(GL_VERSION)))); AddFileLog(' \----- GL_MAX_TEXTURE_SIZE: ' + inttostr(MaxTextureSize)); {$ENDIF} - if MaxTextureSize = 0 then + if MaxTextureSize <= 0 then begin MaxTextureSize:= 1024; {$IFDEF DEBUGFILE} @@ -1146,59 +1121,61 @@ end; {$IFNDEF IPHONEOS} -if StrPos(Str2PChar(vendor), Str2PChar('nvidia')) <> nil then - cGPUVendor:= gvNVIDIA -else if StrPos(Str2PChar(vendor), Str2PChar('intel')) <> nil then - cGPUVendor:= gvATI -else if StrPos(Str2PChar(vendor), Str2PChar('ati')) <> nil then - cGPUVendor:= gvIntel; - + if StrPos(Str2PChar(vendor), Str2PChar('nvidia')) <> nil then + cGPUVendor:= gvNVIDIA + else if StrPos(Str2PChar(vendor), Str2PChar('intel')) <> nil then + cGPUVendor:= gvATI + else if StrPos(Str2PChar(vendor), Str2PChar('ati')) <> nil then + cGPUVendor:= gvIntel; //SupportNPOTT:= glLoadExtension('GL_ARB_texture_non_power_of_two'); {$ENDIF} -// set view port to whole window -glViewport(0, 0, cScreenWidth, cScreenHeight); + // set view port to whole window + glViewport(0, 0, cScreenWidth, cScreenHeight); -glMatrixMode(GL_MODELVIEW); -// prepare default translation/scaling -glLoadIdentity(); -glScalef(2.0 / cScreenWidth, -2.0 / cScreenHeight, 1.0); + glMatrixMode(GL_MODELVIEW); + // prepare default translation/scaling + glLoadIdentity(); + glScalef(2.0 / cScreenWidth, -2.0 / cScreenHeight, 1.0); {$IFDEF IPHONEOS} -//glRotatef(90, 0, 0, 1); + //glRotatef(90, 0, 0, 1); {$ENDIF} -glTranslatef(0, -cScreenHeight / 2, 0); + glTranslatef(0, -cScreenHeight / 2, 0); -// enable alpha blending -glEnable(GL_BLEND); -glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + // enable alpha blending + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); end; procedure SetScale(f: GLfloat); begin -// leave immediately if scale factor did not change -if f = cScaleFactor then exit; + // leave immediately if scale factor did not change + if f = cScaleFactor then exit; -if f = 2.0 then // default scaling - glPopMatrix // "return" to default scaling -else // other scaling + if f = 2.0 then glPopMatrix // "return" to default scaling + else // other scaling begin - glPushMatrix; // save default scaling - glLoadIdentity; - glScalef(f / cScreenWidth, -f / cScreenHeight, 1.0); + glPushMatrix; // save default scaling + glLoadIdentity; + glScalef(f / cScreenWidth, -f / cScreenHeight, 1.0); {$IFDEF IPHONEOS} -// glRotatef(90, 0, 0, 1); + //glRotatef(90, 0, 0, 1); {$ENDIF} - glTranslatef(0, -cScreenHeight / 2, 0); + glTranslatef(0, -cScreenHeight / 2, 0); end; -cScaleFactor:= f; + cScaleFactor:= f; end; //////////////////////////////////////////////////////////////////////////////// -var ProgrTex: PTexture = nil; - Step: integer = 0; +var Step: LongInt = 0; squaresize : LongInt; - numsquares : integer; + numsquares : LongInt; +{$IFDEF SDL13notworking} + ProgrTex: TSDL_TextureID = 0; +{$ELSE} + ProgrTex: PTexture = nil; +{$ENDIF} procedure AddProgress; var r: TSDL_Rect; @@ -1206,47 +1183,63 @@ begin if Step = 0 then begin - {$IFDEF SDL_IMAGE_NEWER} +{$IFDEF SDL_IMAGE_NEWER} WriteToConsole('Init SDL_image... '); SDLTry(IMG_Init(IMG_INIT_PNG) <> 0, true); WriteLnToConsole(msgOK); - {$ENDIF} +{$ENDIF} WriteToConsole(msgLoading + 'progress sprite: '); texsurf:= LoadImage(Pathz[ptGraphics] + '/Progress', ifCritical or ifTransparent); +{$IFDEF SDL13notworking} + ProgrTex:= SDL_CreateTextureFromSurface(0, texsurf); +{$ELSE} ProgrTex:= Surface2Tex(texsurf, false); +{$ENDIF} + squaresize:= texsurf^.w shr 1; + numsquares:= texsurf^.h div squaresize; SDL_FreeSurface(texsurf); - squaresize:= ProgrTex^.w shr 1; - numsquares:= ProgrTex^.h div squaresize; end; -TryDo(ProgrTex <> nil, 'ProgrTex = nil!', true); +{$IFDEF SDL13notworking} + TryDo(ProgrTex <> 0, 'Error - Progress Texure is 0!', true); +{$ELSE} + TryDo(ProgrTex <> nil, 'Error - Progress Texure is nil!', true); +{$ENDIF} -glClear(GL_COLOR_BUFFER_BIT); -glEnable(GL_TEXTURE_2D); -if Step < numsquares then r.x:= 0 -else r.x:= squaresize; -r.y:= (Step mod numsquares) * squaresize; -r.w:= squaresize; -r.h:= squaresize; -DrawFromRect( -squaresize div 2, (cScreenHeight - squaresize) shr 1, @r, ProgrTex); -glDisable(GL_TEXTURE_2D); -SDL_GL_SwapBuffers(); -inc(Step); + glClear(GL_COLOR_BUFFER_BIT); + glEnable(GL_TEXTURE_2D); + if Step < numsquares then r.x:= 0 + else r.x:= squaresize; + + r.y:= (Step mod numsquares) * squaresize; + r.w:= squaresize; + r.h:= squaresize; + +{$IFDEF SDL13notworking} + SDL_RenderCopy(ProgrTex, nil, @r); +{$ELSE} + DrawFromRect( -squaresize div 2, (cScreenHeight - squaresize) shr 1, @r, ProgrTex); +{$ENDIF} + glDisable(GL_TEXTURE_2D); + SDL_GL_SwapBuffers(); + inc(Step); end; procedure FinishProgress; begin -WriteLnToConsole('Freeing progress surface... '); -FreeTexture(ProgrTex); -ProgrTex:= nil; + WriteLnToConsole('Freeing progress surface... '); +{$IFDEF SDL13notworking} + SDL_DestroyTexture(ProgrTex); +{$ELSE} + FreeTexture(ProgrTex); +{$ENDIF} {$IFDEF IPHONEOS} -// show overlay buttons -IPH_showControls; + // show overlay buttons + IPH_showControls; {$ENDIF} - end; procedure flipSurface(Surface: PSDL_Surface; Vertical: Boolean);