diff -r d445798e5fe2 -r 8fdb08497bf1 hedgewars/uStore.pas --- a/hedgewars/uStore.pas Sun May 02 18:25:13 2010 +0000 +++ b/hedgewars/uStore.pas Sun May 02 18:42:19 2010 +0000 @@ -608,7 +608,7 @@ procedure DrawRotated(Sprite: TSprite; X, Y, Dir: LongInt; Angle: real); begin -DrawRotatedTex(SpritesData[Sprite].Texture, + DrawRotatedTex(SpritesData[Sprite].Texture, SpritesData[Sprite].Width, SpritesData[Sprite].Height, X, Y, Dir, Angle) @@ -711,11 +711,11 @@ procedure DrawSprite2(Sprite: TSprite; X, Y, FrameX, FrameY: LongInt); var r: TSDL_Rect; begin -r.x:= FrameX * SpritesData[Sprite].Width; -r.w:= SpritesData[Sprite].Width; -r.y:= FrameY * SpritesData[Sprite].Height; -r.h:= SpritesData[Sprite].Height; -DrawFromRect(X, Y, @r, SpritesData[Sprite].Texture) + r.x:= FrameX * SpritesData[Sprite].Width; + r.w:= SpritesData[Sprite].Width; + r.y:= FrameY * SpritesData[Sprite].Height; + r.h:= SpritesData[Sprite].Height; + DrawFromRect(X, Y, @r, SpritesData[Sprite].Texture) end; procedure DrawCentered(X, Top: LongInt; Source: PTexture); @@ -803,14 +803,15 @@ procedure StoreRelease; var ii: TSprite; begin -for ii:= Low(TSprite) to High(TSprite) do + for ii:= Low(TSprite) to High(TSprite) do begin - FreeTexture(SpritesData[ii].Texture); - if SpritesData[ii].Surface <> nil then SDL_FreeSurface(SpritesData[ii].Surface) + FreeTexture(SpritesData[ii].Texture); + if SpritesData[ii].Surface <> nil then + SDL_FreeSurface(SpritesData[ii].Surface) end; -SDL_FreeSurface(MissionIcons); -FreeTexture(ropeIconTex); -FreeTexture(HHTexture) + SDL_FreeSurface(MissionIcons); + FreeTexture(ropeIconTex); + FreeTexture(HHTexture); end; @@ -1134,12 +1135,32 @@ procedure SetupOpenGL; var vendor: shortstring; +{$IFDEF DARWIN} + one: LongInt; +{$ENDIF} begin + // initialized here because when initModule is called cScreenWidth/Height are not yet set + if (uStore.wScreen = 0) and (uStore.hScreen = 0) then + begin + uStore.wScreen:= cScreenWidth; + uStore.hScreen:= cScreenHeight; + end; + {$IFDEF IPHONEOS} SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 0); // no double buffering SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 1); {$ELSE} SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); +{$IFNDEF SDL13} +// this attribute is default in 1.3 and must be enabled in MacOSX + if cVSyncInUse then + SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1); +{$IFDEF DARWIN} +// fixes vsync in Snow Leopard + one := 1; + CGLSetParameter(CGLGetCurrentContext(), 222, @one); +{$ENDIF} +{$ENDIF} {$ENDIF} SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0); // no depth buffer SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); @@ -1149,14 +1170,6 @@ SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 16); // buffer has to be 16 bit only SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); // try to prefer hardware rendering -{$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); vendor:= LowerCase(shortstring(pchar(glGetString(GL_VENDOR)))); @@ -1276,7 +1289,7 @@ r.w:= squaresize; r.h:= squaresize; - DrawFromRect( -squaresize div 2, (cScreenHeight - squaresize) shr 1, @r, ProgrTex); + DrawFromRect( -squaresize div 2, (hScreen - squaresize) shr 1, @r, ProgrTex); SDL_GL_SwapBuffers(); {$IFDEF SDL13} @@ -1554,8 +1567,10 @@ {$ELSE} cGPUVendor:= gvUnknown; {$ENDIF} - uStore.wScreen:= cScreenWidth; - uStore.hScreen:= cScreenHeight; + // really initalized in storeLoad + uStore.wScreen:= 0; + uStore.hScreen:= 0; + cScaleFactor:= 2.0; SupportNPOTT:= false; Step:= 0;