author | blackmetalowiec |
Wed, 07 Dec 2011 12:19:36 +0100 | |
changeset 6513 | 677b96d13e1f |
parent 6492 | 71db3c0daa0a |
child 6515 | 74a04089bb56 |
permissions | -rw-r--r-- |
4 | 1 |
(* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
4976 | 3 |
* Copyright (c) 2004-2011 Andrey Korotaev <unC0Rr@gmail.com> |
4 | 4 |
* |
183 | 5 |
* This program is free software; you can redistribute it and/or modify |
6 |
* it under the terms of the GNU General Public License as published by |
|
7 |
* the Free Software Foundation; version 2 of the License |
|
4 | 8 |
* |
183 | 9 |
* This program is distributed in the hope that it will be useful, |
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
* GNU General Public License for more details. |
|
4 | 13 |
* |
183 | 14 |
* You should have received a copy of the GNU General Public License |
15 |
* along with this program; if not, write to the Free Software |
|
16 |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
|
4 | 17 |
*) |
18 |
||
2623 | 19 |
{$INCLUDE "options.inc"} |
4850 | 20 |
{$IF GLunit = GL}{$DEFINE GLunit:=GL,GLext}{$ENDIF} |
2623 | 21 |
|
4 | 22 |
unit uStore; |
23 |
interface |
|
6379 | 24 |
uses sysutils, uConsts, SDLh, GLunit, uTypes, uLandTexture, uCaptions, uChat; |
3692 | 25 |
|
3038 | 26 |
procedure initModule; |
27 |
procedure freeModule; |
|
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2705
diff
changeset
|
28 |
|
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
29 |
procedure StoreLoad(reload: boolean = false); |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
30 |
procedure StoreRelease(reload: boolean = false); |
4 | 31 |
procedure RenderHealth(var Hedgehog: THedgehog); |
32 |
procedure AddProgress; |
|
510 | 33 |
procedure FinishProgress; |
2905 | 34 |
function LoadImage(const filename: shortstring; imageFlags: LongInt): PSDL_Surface; |
4874 | 35 |
procedure LoadHedgehogHat(HHGear: PGear; newHat: shortstring); |
753 | 36 |
procedure SetupOpenGL; |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2154
diff
changeset
|
37 |
procedure SetScale(f: GLfloat); |
3394
47b51e22e670
Henek's patch - adds a column to ammoMenu and removes the F* column in iphone version
koda
parents:
3390
diff
changeset
|
38 |
function RenderHelpWindow(caption, subcaption, description, extra: ansistring; extracolor: LongInt; iconsurf: PSDL_Surface; iconrect: PSDL_Rect): PTexture; |
2747 | 39 |
procedure RenderWeaponTooltip(atype: TAmmoType); |
40 |
procedure ShowWeaponTooltip(x, y: LongInt); |
|
41 |
procedure FreeWeaponTooltip; |
|
4889
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
42 |
procedure MakeCrossHairs; |
4 | 43 |
|
44 |
implementation |
|
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
45 |
uses uMisc, uConsole, uMobile, uVariables, uUtils, uTextures, uRender, uRenderUtils, uCommands, uDebug, uWorld; |
4 | 46 |
|
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
47 |
//type TGPUVendor = (gvUnknown, gvNVIDIA, gvATI, gvIntel, gvApple); |
2568
e654cbfb23ba
Bunch of neat stuff by Smaxx. ATI check, translucent name tags to reduce terrain fail, disabling health crates on invulnerable hogs. Also tweaks to prior stuff.
nemo
parents:
2567
diff
changeset
|
48 |
|
4385 | 49 |
var MaxTextureSize: LongInt; |
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
50 |
// cGPUVendor: TGPUVendor; |
4 | 51 |
|
2905 | 52 |
function WriteInRect(Surface: PSDL_Surface; X, Y: LongInt; Color: LongWord; Font: THWFont; s: ansistring): TSDL_Rect; |
2747 | 53 |
var w, h: LongInt; |
54 |
tmpsurf: PSDL_Surface; |
|
55 |
clr: TSDL_Color; |
|
56 |
finalRect: TSDL_Rect; |
|
57 |
begin |
|
3407 | 58 |
w:= 0; h:= 0; // avoid compiler hints |
6286
835392304f81
and while we are giving SDLh.pas all this love, let's fix the signature of one SDL_ttf calls
koda
parents:
6089
diff
changeset
|
59 |
TTF_SizeUTF8(Fontz[Font].Handle, Str2PChar(s), @w, @h); |
2747 | 60 |
finalRect.x:= X + FontBorder + 2; |
61 |
finalRect.y:= Y + FontBorder; |
|
62 |
finalRect.w:= w + FontBorder * 2 + 4; |
|
63 |
finalRect.h:= h + FontBorder * 2; |
|
64 |
clr.r:= Color shr 16; |
|
65 |
clr.g:= (Color shr 8) and $FF; |
|
66 |
clr.b:= Color and $FF; |
|
67 |
tmpsurf:= TTF_RenderUTF8_Blended(Fontz[Font].Handle, Str2PChar(s), clr); |
|
68 |
tmpsurf:= doSurfaceConversion(tmpsurf); |
|
69 |
SDLTry(tmpsurf <> nil, true); |
|
70 |
SDL_UpperBlit(tmpsurf, nil, Surface, @finalRect); |
|
71 |
SDL_FreeSurface(tmpsurf); |
|
72 |
finalRect.x:= X; |
|
73 |
finalRect.y:= Y; |
|
74 |
finalRect.w:= w + FontBorder * 2 + 4; |
|
75 |
finalRect.h:= h + FontBorder * 2; |
|
76 |
WriteInRect:= finalRect |
|
77 |
end; |
|
78 |
||
4889
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
79 |
procedure MakeCrossHairs; |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
80 |
var t: LongInt; |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
81 |
tmpsurf, texsurf: PSDL_Surface; |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
82 |
Color, i: Longword; |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
83 |
s : shortstring; |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
84 |
begin |
5238
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
85 |
s:= UserPathz[ptGraphics] + '/' + cCHFileName; |
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
86 |
if not FileExists(s+'.png') then s:= Pathz[ptGraphics] + '/' + cCHFileName; |
4889
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
87 |
tmpsurf:= LoadImage(s, ifAlpha or ifCritical); |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
88 |
|
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
89 |
for t:= 0 to Pred(TeamsCount) do |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
90 |
with TeamsArray[t]^ do |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
91 |
begin |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
92 |
texsurf:= SDL_CreateRGBSurface(SDL_SWSURFACE, tmpsurf^.w, tmpsurf^.h, 32, RMask, GMask, BMask, AMask); |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
93 |
TryDo(texsurf <> nil, errmsgCreateSurface, true); |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
94 |
|
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
95 |
Color:= Clan^.Color; |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
96 |
Color:= SDL_MapRGB(texsurf^.format, Color shr 16, Color shr 8, Color and $FF); |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
97 |
SDL_FillRect(texsurf, nil, Color); |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
98 |
|
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
99 |
SDL_UpperBlit(tmpsurf, nil, texsurf, nil); |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
100 |
|
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
101 |
TryDo(tmpsurf^.format^.BytesPerPixel = 4, 'Ooops', true); |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
102 |
|
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
103 |
if SDL_MustLock(texsurf) then |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
104 |
SDLTry(SDL_LockSurface(texsurf) >= 0, true); |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
105 |
|
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
106 |
// make black pixel be alpha-transparent |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
107 |
for i:= 0 to texsurf^.w * texsurf^.h - 1 do |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
108 |
if PLongwordArray(texsurf^.pixels)^[i] = AMask then PLongwordArray(texsurf^.pixels)^[i]:= (RMask or GMask or BMask) and Color; |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
109 |
|
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
110 |
if SDL_MustLock(texsurf) then |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
111 |
SDL_UnlockSurface(texsurf); |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
112 |
|
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
113 |
FreeTexture(CrosshairTex); |
4889
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
114 |
CrosshairTex:= Surface2Tex(texsurf, false); |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
115 |
SDL_FreeSurface(texsurf) |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
116 |
end; |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
117 |
|
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
118 |
SDL_FreeSurface(tmpsurf) |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
119 |
end; |
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
120 |
|
4 | 121 |
|
6492 | 122 |
procedure WriteNames(Font: THWFont); |
123 |
var t: LongInt; |
|
124 |
i: LongInt; |
|
125 |
r, rr: TSDL_Rect; |
|
126 |
drY: LongInt; |
|
127 |
texsurf, flagsurf, iconsurf: PSDL_Surface; |
|
128 |
s: shortstring; |
|
129 |
begin |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
130 |
r.x:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
131 |
r.y:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
132 |
drY:= - 4; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
133 |
for t:= 0 to Pred(TeamsCount) do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
134 |
with TeamsArray[t]^ do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
135 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
136 |
NameTagTex:= RenderStringTex(TeamName, Clan^.Color, Font); |
690 | 137 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
138 |
r.w:= cTeamHealthWidth + 5; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
139 |
r.h:= NameTagTex^.h; |
690 | 140 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
141 |
texsurf:= SDL_CreateRGBSurface(SDL_SWSURFACE, r.w, r.h, 32, RMask, GMask, BMask, AMask); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
142 |
TryDo(texsurf <> nil, errmsgCreateSurface, true); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
143 |
TryDo(SDL_SetColorKey(texsurf, SDL_SRCCOLORKEY, 0) = 0, errmsgTransparentSet, true); |
690 | 144 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
145 |
DrawRoundRect(@r, cWhiteColor, cNearBlackColorChannels.value, texsurf, true); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
146 |
rr:= r; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
147 |
inc(rr.x, 2); dec(rr.w, 4); inc(rr.y, 2); dec(rr.h, 4); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
148 |
DrawRoundRect(@rr, Clan^.Color, Clan^.Color, texsurf, false); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
149 |
HealthTex:= Surface2Tex(texsurf, false); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
150 |
SDL_FreeSurface(texsurf); |
690 | 151 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
152 |
r.x:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
153 |
r.y:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
154 |
r.w:= 32; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
155 |
r.h:= 32; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
156 |
texsurf:= SDL_CreateRGBSurface(SDL_SWSURFACE, r.w, r.h, 32, RMask, GMask, BMask, AMask); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
157 |
TryDo(texsurf <> nil, errmsgCreateSurface, true); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
158 |
TryDo(SDL_SetColorKey(texsurf, SDL_SRCCOLORKEY, 0) = 0, errmsgTransparentSet, true); |
2747 | 159 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
160 |
r.w:= 26; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
161 |
r.h:= 19; |
2747 | 162 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
163 |
DrawRoundRect(@r, cWhiteColor, cNearBlackColor, texsurf, true); |
3697 | 164 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
165 |
// overwrite flag for cpu teams and keep players from using it |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
166 |
if (Hedgehogs[0].Gear <> nil) and (Hedgehogs[0].BotLevel > 0) then |
4517
0618b31023dc
added team flag to AddTeam and made AI team allowed to have custom flags. added GetGearVelocity and SetGearVelocity and removed CopyPV2. changed knockball to use use these functions instead.
Henek
parents:
4404
diff
changeset
|
167 |
if Flag = 'hedgewars' then Flag:= 'cpu' |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
168 |
else if Flag = 'cpu' then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
169 |
Flag:= 'hedgewars'; |
3697 | 170 |
|
5238
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
171 |
flagsurf:= LoadImage(UserPathz[ptFlags] + '/' + Flag, ifNone); |
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
172 |
if flagsurf = nil then flagsurf:= LoadImage(Pathz[ptFlags] + '/' + Flag, ifNone); |
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
173 |
if flagsurf = nil then flagsurf:= LoadImage(UserPathz[ptFlags] + '/hedgewars', ifNone); |
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
174 |
if flagsurf = nil then flagsurf:= LoadImage(Pathz[ptFlags] + '/hedgewars', ifNone); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
175 |
TryDo(flagsurf <> nil, 'Failed to load flag "' + Flag + '" as well as the default flag', true); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
176 |
copyToXY(flagsurf, texsurf, 2, 2); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
177 |
SDL_FreeSurface(flagsurf); |
3513
f589230fa21b
now it's possible to select the scheme file in the ifrontendfix a type about loading an image (iphone file system IS case senstive)
koda
parents:
3509
diff
changeset
|
178 |
flagsurf:= nil; |
3697 | 179 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
180 |
// restore black border pixels inside the flag |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
181 |
PLongwordArray(texsurf^.pixels)^[32 * 2 + 2]:= cNearBlackColor; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
182 |
PLongwordArray(texsurf^.pixels)^[32 * 2 + 23]:= cNearBlackColor; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
183 |
PLongwordArray(texsurf^.pixels)^[32 * 16 + 2]:= cNearBlackColor; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
184 |
PLongwordArray(texsurf^.pixels)^[32 * 16 + 23]:= cNearBlackColor; |
2747 | 185 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
186 |
FlagTex:= Surface2Tex(texsurf, false); |
3041 | 187 |
SDL_FreeSurface(texsurf); |
4874 | 188 |
texsurf:= nil; |
3041 | 189 |
|
3773 | 190 |
AIKillsTex := RenderStringTex(inttostr(stats.AIKills), Clan^.Color, fnt16); |
191 |
||
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
192 |
dec(drY, r.h + 2); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
193 |
DrawHealthY:= drY; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
194 |
for i:= 0 to 7 do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
195 |
with Hedgehogs[i] do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
196 |
if Gear <> nil then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
197 |
begin |
4889
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
198 |
NameTagTex:= RenderStringTex(Name, Clan^.Color, fnt16); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
199 |
if Hat <> 'NoHat' then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
200 |
begin |
2874
3c7c2bf1ba38
A simple hat reservation mechanism. Can be worked around with a little effort, but to make it useful, you'd have to get everyone you played with to work around it too. Quite a bit of effort for a small reward feature.
nemo
parents:
2873
diff
changeset
|
201 |
if (Length(Hat) > 39) and (Copy(Hat,1,8) = 'Reserved') and (Copy(Hat,9,32) = PlayerHash) then |
4874 | 202 |
LoadHedgehogHat(Gear, 'Reserved/' + Copy(Hat,9,Length(s)-8)) |
2874
3c7c2bf1ba38
A simple hat reservation mechanism. Can be worked around with a little effort, but to make it useful, you'd have to get everyone you played with to work around it too. Quite a bit of effort for a small reward feature.
nemo
parents:
2873
diff
changeset
|
203 |
else |
4874 | 204 |
LoadHedgehogHat(Gear, Hat); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
205 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
206 |
end; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
207 |
end; |
5238
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
208 |
MissionIcons:= LoadImage(UserPathz[ptGraphics] + '/missions', ifNone); |
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
209 |
if MissionIcons = nil then MissionIcons:= LoadImage(Pathz[ptGraphics] + '/missions', ifCritical); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
210 |
iconsurf:= SDL_CreateRGBSurface(SDL_SWSURFACE, 28, 28, 32, RMask, GMask, BMask, AMask); |
3862 | 211 |
if iconsurf <> nil then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
212 |
begin |
3862 | 213 |
r.x:= 0; |
214 |
r.y:= 0; |
|
215 |
r.w:= 28; |
|
216 |
r.h:= 28; |
|
217 |
DrawRoundRect(@r, cWhiteColor, cNearBlackColor, iconsurf, true); |
|
218 |
ropeIconTex:= Surface2Tex(iconsurf, false); |
|
219 |
SDL_FreeSurface(iconsurf); |
|
220 |
iconsurf:= nil; |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
221 |
end; |
6492 | 222 |
end; |
4 | 223 |
|
6492 | 224 |
procedure InitHealth; |
225 |
var i, t: LongInt; |
|
226 |
begin |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
227 |
for t:= 0 to Pred(TeamsCount) do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
228 |
if TeamsArray[t] <> nil then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
229 |
with TeamsArray[t]^ do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
230 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
231 |
for i:= 0 to cMaxHHIndex do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
232 |
if Hedgehogs[i].Gear <> nil then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
233 |
RenderHealth(Hedgehogs[i]); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
234 |
end |
6492 | 235 |
end; |
4 | 236 |
|
6492 | 237 |
procedure LoadGraves; |
238 |
var t: LongInt; |
|
239 |
texsurf: PSDL_Surface; |
|
240 |
begin |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
241 |
for t:= 0 to Pred(TeamsCount) do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
242 |
if TeamsArray[t] <> nil then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
243 |
with TeamsArray[t]^ do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
244 |
begin |
3689 | 245 |
if GraveName = '' then GraveName:= 'Statue'; |
5238
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
246 |
texsurf:= LoadImage(UserPathz[ptGraves] + '/' + GraveName, ifTransparent); |
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
247 |
if texsurf = nil then texsurf:= LoadImage(Pathz[ptGraves] + '/' + GraveName, ifTransparent); |
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
248 |
if texsurf = nil then texsurf:= LoadImage(UserPathz[ptGraves] + '/Statue', ifTransparent); |
3689 | 249 |
if texsurf = nil then texsurf:= LoadImage(Pathz[ptGraves] + '/Statue', ifCritical or ifTransparent); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
250 |
GraveTex:= Surface2Tex(texsurf, false); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
251 |
SDL_FreeSurface(texsurf) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
252 |
end |
6492 | 253 |
end; |
4 | 254 |
|
6492 | 255 |
procedure StoreLoad(reload: boolean); |
256 |
var s: shortstring; |
|
257 |
ii: TSprite; |
|
844 | 258 |
fi: THWFont; |
259 |
ai: TAmmoType; |
|
260 |
tmpsurf: PSDL_Surface; |
|
261 |
i: LongInt; |
|
4 | 262 |
begin |
5712 | 263 |
AddFileLog('StoreLoad()'); |
5714 | 264 |
|
265 |
if not reload then |
|
266 |
for fi:= Low(THWFont) to High(THWFont) do |
|
267 |
with Fontz[fi] do |
|
268 |
begin |
|
269 |
s:= UserPathz[ptFonts] + '/' + Name; |
|
270 |
if not FileExists(s) then s:= Pathz[ptFonts] + '/' + Name; |
|
271 |
WriteToConsole(msgLoading + s + ' (' + inttostr(Height) + 'pt)... '); |
|
272 |
Handle:= TTF_OpenFont(Str2PChar(s), Height); |
|
273 |
SDLTry(Handle <> nil, true); |
|
274 |
TTF_SetFontStyle(Handle, style); |
|
275 |
WriteLnToConsole(msgOK) |
|
276 |
end; |
|
53 | 277 |
|
4 | 278 |
WriteNames(fnt16); |
70 | 279 |
MakeCrossHairs; |
4 | 280 |
LoadGraves; |
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
281 |
if not reload then |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
282 |
AddProgress; |
4 | 283 |
|
284 |
for ii:= Low(TSprite) to High(TSprite) do |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
285 |
with SpritesData[ii] do |
5215
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
286 |
// FIXME - add a sprite attribute to match on rq flags? |
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
287 |
if (((cReducedQuality and (rqNoBackground or rqLowRes)) = 0) or // why rqLowRes? |
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
288 |
(not (ii in [sprSky, sprSkyL, sprSkyR, sprHorizont, sprHorizontL, sprHorizontR]))) and |
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
289 |
(((cReducedQuality and rqPlainSplash) = 0) or ((not (ii in [sprSplash, sprDroplet, sprSDSplash, sprSDDroplet])))) and |
5285
af4dc03dd60d
Make sky, horizon, flakes and clouds optional, replace repeated strips of skyL/skyR with 2x2 transparent PNGs instead of larger images of variable dimensions, remove a number of empty unused images
nemo
parents:
5284
diff
changeset
|
290 |
(((cReducedQuality and rqKillFlakes) = 0) or (Theme = 'Snow') or (Theme = 'Christmas') or ((not (ii in [sprFlake, sprSDFlake])))) and |
af4dc03dd60d
Make sky, horizon, flakes and clouds optional, replace repeated strips of skyL/skyR with 2x2 transparent PNGs instead of larger images of variable dimensions, remove a number of empty unused images
nemo
parents:
5284
diff
changeset
|
291 |
((cCloudsNumber > 0) or (ii <> sprCloud)) and |
af4dc03dd60d
Make sky, horizon, flakes and clouds optional, replace repeated strips of skyL/skyR with 2x2 transparent PNGs instead of larger images of variable dimensions, remove a number of empty unused images
nemo
parents:
5284
diff
changeset
|
292 |
((vobCount > 0) or (ii <> sprFlake)) then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
293 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
294 |
if AltPath = ptNone then |
6025
cac1d5601d7c
reviewed the build system and parts of the previous merge, performed some code cleanup
koda
parents:
6023
diff
changeset
|
295 |
if ii in [sprHorizont, sprHorizontL, sprHorizontR, sprSky, sprSkyL, sprSkyR, sprChunk, sprFireButton] then // FIXME: hack |
5238
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
296 |
begin |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
297 |
if not reload then |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
298 |
begin |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
299 |
tmpsurf:= LoadImage(UserPathz[Path] + '/' + FileName, ifAlpha or ifTransparent); |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
300 |
if tmpsurf = nil then tmpsurf:= LoadImage(Pathz[Path] + '/' + FileName, ifAlpha or ifTransparent) |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
301 |
end |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
302 |
else tmpsurf:= Surface |
5238
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
303 |
end |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
304 |
else |
5238
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
305 |
begin |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
306 |
if not reload then |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
307 |
begin |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
308 |
tmpsurf:= LoadImage(UserPathz[Path] + '/' + FileName, ifAlpha or ifTransparent); |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
309 |
if tmpsurf = nil then tmpsurf:= LoadImage(Pathz[Path] + '/' + FileName, ifAlpha or ifTransparent or ifCritical) |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
310 |
end |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
311 |
else tmpsurf:= Surface |
5238
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
312 |
end |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
313 |
else begin |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
314 |
if not reload then |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
315 |
begin |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
316 |
tmpsurf:= LoadImage(UserPathz[Path] + '/' + FileName, ifAlpha or ifTransparent); |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
317 |
if tmpsurf = nil then tmpsurf:= LoadImage(Pathz[Path] + '/' + FileName, ifAlpha or ifTransparent); |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
318 |
if tmpsurf = nil then tmpsurf:= LoadImage(UserPathz[AltPath] + '/' + FileName, ifAlpha or ifTransparent); |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
319 |
if tmpsurf = nil then tmpsurf:= LoadImage(Pathz[AltPath] + '/' + FileName, ifAlpha or ifCritical or ifTransparent) |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
320 |
end |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
321 |
else tmpsurf:= Surface |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
322 |
end; |
2426 | 323 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
324 |
if tmpsurf <> nil then |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
325 |
begin |
3558 | 326 |
if getImageDimensions then |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
327 |
begin |
3558 | 328 |
imageWidth:= tmpsurf^.w; |
329 |
imageHeight:= tmpsurf^.h |
|
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
330 |
end; |
3558 | 331 |
if getDimensions then |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
332 |
begin |
3558 | 333 |
Width:= tmpsurf^.w; |
334 |
Height:= tmpsurf^.h |
|
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
335 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
336 |
if (ii in [sprSky, sprSkyL, sprSkyR, sprHorizont, sprHorizontL, sprHorizontR]) then |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
337 |
begin |
3537
8f5b3108f29c
New approach to the low-res problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3525
diff
changeset
|
338 |
Texture:= Surface2Tex(tmpsurf, true); |
8f5b3108f29c
New approach to the low-res problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3525
diff
changeset
|
339 |
Texture^.Scale:= 2 |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
340 |
end |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
341 |
else |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
342 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
343 |
Texture:= Surface2Tex(tmpsurf, false); |
4809
9c7d5f802618
rearrange quality flags a little, disable snow rendering on rqLowRes
koda
parents:
4782
diff
changeset
|
344 |
// HACK: We should include some sprite attribute to define the texture wrap directions |
9c7d5f802618
rearrange quality flags a little, disable snow rendering on rqLowRes
koda
parents:
4782
diff
changeset
|
345 |
if ((ii = sprWater) or (ii = sprSDWater)) and ((cReducedQuality and (rq2DWater or rqClampLess)) = 0) then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
346 |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
347 |
end; |
3491 | 348 |
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, priority); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
349 |
// This should maybe be flagged. It wastes quite a bit of memory. |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
350 |
if not reload then |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
351 |
begin |
5714 | 352 |
{$IF DEFINED(DARWIN) OR DEFINED(WIN32)} |
353 |
Surface:= tmpsurf |
|
354 |
{$ELSE} |
|
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
355 |
if saveSurf then Surface:= tmpsurf else SDL_FreeSurface(tmpsurf) |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
356 |
{$ENDIF} |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
357 |
end |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
358 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
359 |
else |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
360 |
Surface:= nil |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
361 |
end; |
80 | 362 |
|
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
363 |
if not reload then |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
364 |
AddProgress; |
567 | 365 |
|
5238
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
366 |
tmpsurf:= LoadImage(UserPathz[ptGraphics] + '/' + cHHFileName, ifAlpha or ifTransparent); |
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
367 |
if tmpsurf = nil then tmpsurf:= LoadImage(Pathz[ptGraphics] + '/' + cHHFileName, ifAlpha or ifCritical or ifTransparent); |
2290
bf87ca44782e
Selectively enable clamping - seeing if this helps avoid weird flake problems while still fixing vertical lines in waves and sky
nemo
parents:
2285
diff
changeset
|
368 |
HHTexture:= Surface2Tex(tmpsurf, false); |
761 | 369 |
SDL_FreeSurface(tmpsurf); |
4 | 370 |
|
371 |
InitHealth; |
|
372 |
||
2623 | 373 |
PauseTexture:= RenderStringTex(trmsg[sidPaused], cYellowColor, fntBig); |
374 |
ConfirmTexture:= RenderStringTex(trmsg[sidConfirm], cYellowColor, fntBig); |
|
375 |
SyncTexture:= RenderStringTex(trmsg[sidSync], cYellowColor, fntBig); |
|
281
5b483aa9f2ab
Pause support (mouse cursor is released when the game is paused)
unc0rr
parents:
208
diff
changeset
|
376 |
|
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
377 |
if not reload then |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
378 |
AddProgress; |
2601 | 379 |
|
2670 | 380 |
// name of weapons in ammo menu |
843 | 381 |
for ai:= Low(TAmmoType) to High(TAmmoType) do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
382 |
with Ammoz[ai] do |
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
383 |
begin |
3384 | 384 |
TryDo(trAmmo[NameId] <> '','No default text/translation found for ammo type #' + intToStr(ord(ai)) + '!',true); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
385 |
tmpsurf:= TTF_RenderUTF8_Blended(Fontz[CheckCJKFont(trAmmo[NameId],fnt16)].Handle, Str2PChar(trAmmo[NameId]), cWhiteColorChannels); |
3384 | 386 |
TryDo(tmpsurf <> nil,'Name-texture creation for ammo type #' + intToStr(ord(ai)) + ' failed!',true); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
387 |
tmpsurf:= doSurfaceConversion(tmpsurf); |
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
388 |
FreeTexture(NameTex); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
389 |
NameTex:= Surface2Tex(tmpsurf, false); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
390 |
SDL_FreeSurface(tmpsurf) |
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
391 |
end; |
2376 | 392 |
|
2670 | 393 |
// number of weapons in ammo menu |
844 | 394 |
for i:= Low(CountTexz) to High(CountTexz) do |
3765
ebfe7c9b3085
set flake to non critical, no touches until game is starding, moved some variables to be initialized in the right place
koda
parents:
3764
diff
changeset
|
395 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
396 |
tmpsurf:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(IntToStr(i) + 'x'), cWhiteColorChannels); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
397 |
tmpsurf:= doSurfaceConversion(tmpsurf); |
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
398 |
FreeTexture(CountTexz[i]); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
399 |
CountTexz[i]:= Surface2Tex(tmpsurf, false); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
400 |
SDL_FreeSurface(tmpsurf) |
3765
ebfe7c9b3085
set flake to non critical, no touches until game is starding, moved some variables to be initialized in the right place
koda
parents:
3764
diff
changeset
|
401 |
end; |
844 | 402 |
|
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
403 |
if not reload then |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
404 |
AddProgress; |
2669 | 405 |
IMG_Quit(); |
4 | 406 |
end; |
407 |
||
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
408 |
procedure StoreRelease(reload: boolean); |
4 | 409 |
var ii: TSprite; |
4901 | 410 |
ai: TAmmoType; |
411 |
i, t: LongInt; |
|
4 | 412 |
begin |
3405 | 413 |
for ii:= Low(TSprite) to High(TSprite) do |
5562 | 414 |
begin |
3405 | 415 |
FreeTexture(SpritesData[ii].Texture); |
3513
f589230fa21b
now it's possible to select the scheme file in the ifrontendfix a type about loading an image (iphone file system IS case senstive)
koda
parents:
3509
diff
changeset
|
416 |
SpritesData[ii].Texture:= nil; |
6453
11c578d30bd3
Countless imporvements to the parser and countless help to the parser in sources.
unc0rr
parents:
6415
diff
changeset
|
417 |
if (SpritesData[ii].Surface <> nil) and (not reload) then |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
418 |
begin |
3513
f589230fa21b
now it's possible to select the scheme file in the ifrontendfix a type about loading an image (iphone file system IS case senstive)
koda
parents:
3509
diff
changeset
|
419 |
SDL_FreeSurface(SpritesData[ii].Surface); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
420 |
SpritesData[ii].Surface:= nil |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
421 |
end |
5562 | 422 |
end; |
3405 | 423 |
SDL_FreeSurface(MissionIcons); |
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
424 |
|
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
425 |
// free the textures declared in uVariables |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
426 |
FreeTexture(WeaponTooltipTex); |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
427 |
WeaponTooltipTex:= nil; |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
428 |
FreeTexture(PauseTexture); |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
429 |
PauseTexture:= nil; |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
430 |
FreeTexture(SyncTexture); |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
431 |
SyncTexture:= nil; |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
432 |
FreeTexture(ConfirmTexture); |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
433 |
ConfirmTexture:= nil; |
3405 | 434 |
FreeTexture(ropeIconTex); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
435 |
ropeIconTex:= nil; |
3405 | 436 |
FreeTexture(HHTexture); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
437 |
HHTexture:= nil; |
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
438 |
|
4901 | 439 |
// free all ammo name textures |
440 |
for ai:= Low(TAmmoType) to High(TAmmoType) do |
|
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
441 |
begin |
4901 | 442 |
FreeTexture(Ammoz[ai].NameTex); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
443 |
Ammoz[ai].NameTex:= nil |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
444 |
end; |
5562 | 445 |
|
4901 | 446 |
// free all count textures |
447 |
for i:= Low(CountTexz) to High(CountTexz) do |
|
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
448 |
begin |
4901 | 449 |
FreeTexture(CountTexz[i]); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
450 |
CountTexz[i]:= nil |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
451 |
end; |
5562 | 452 |
|
4901 | 453 |
// free all team and hedgehog textures |
454 |
for t:= 0 to Pred(TeamsCount) do |
|
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
455 |
begin |
4901 | 456 |
if TeamsArray[t] <> nil then |
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
457 |
begin |
4901 | 458 |
FreeTexture(TeamsArray[t]^.NameTagTex); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
459 |
TeamsArray[t]^.NameTagTex:= nil; |
4901 | 460 |
FreeTexture(TeamsArray[t]^.CrosshairTex); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
461 |
TeamsArray[t]^.CrosshairTex:= nil; |
4901 | 462 |
FreeTexture(TeamsArray[t]^.GraveTex); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
463 |
TeamsArray[t]^.GraveTex:= nil; |
4901 | 464 |
FreeTexture(TeamsArray[t]^.HealthTex); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
465 |
TeamsArray[t]^.HealthTex:= nil; |
4901 | 466 |
FreeTexture(TeamsArray[t]^.AIKillsTex); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
467 |
TeamsArray[t]^.AIKillsTex:= nil; |
4901 | 468 |
FreeTexture(TeamsArray[t]^.FlagTex); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
469 |
TeamsArray[t]^.FlagTex:= nil; |
4901 | 470 |
for i:= 0 to cMaxHHIndex do |
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
471 |
begin |
4901 | 472 |
FreeTexture(TeamsArray[t]^.Hedgehogs[i].NameTagTex); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
473 |
TeamsArray[t]^.Hedgehogs[i].NameTagTex:= nil; |
4901 | 474 |
FreeTexture(TeamsArray[t]^.Hedgehogs[i].HealthTagTex); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
475 |
TeamsArray[t]^.Hedgehogs[i].HealthTagTex:= nil; |
4901 | 476 |
FreeTexture(TeamsArray[t]^.Hedgehogs[i].HatTex); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
477 |
TeamsArray[t]^.Hedgehogs[i].HatTex:= nil; |
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
478 |
end; |
4901 | 479 |
end; |
480 |
end; |
|
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
481 |
{$IFNDEF S3D_DISABLED} |
3696 | 482 |
if (cStereoMode = smHorizontal) or (cStereoMode = smVertical) or (cStereoMode = smAFR) then |
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
483 |
begin |
3692 | 484 |
glDeleteTextures(1, @texl); |
485 |
glDeleteRenderbuffersEXT(1, @depthl); |
|
486 |
glDeleteFramebuffersEXT(1, @framel); |
|
487 |
glDeleteTextures(1, @texr); |
|
488 |
glDeleteRenderbuffersEXT(1, @depthr); |
|
489 |
glDeleteFramebuffersEXT(1, @framer) |
|
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
490 |
end |
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
491 |
{$ENDIF} |
4 | 492 |
end; |
493 |
||
2677
83ad68ceef72
Non-hacked version of CJK handling. Should switch to CJK rendering only if a particular string needs it, instead of based on locale file.
nemo
parents:
2674
diff
changeset
|
494 |
|
4 | 495 |
procedure RenderHealth(var Hedgehog: THedgehog); |
95 | 496 |
var s: shortstring; |
4 | 497 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
498 |
str(Hedgehog.Gear^.Health, s); |
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
499 |
FreeTexture(Hedgehog.HealthTagTex); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
500 |
Hedgehog.HealthTagTex:= RenderStringTex(s, Hedgehog.Team^.Clan^.Color, fnt16) |
4 | 501 |
end; |
502 |
||
2905 | 503 |
function LoadImage(const filename: shortstring; imageFlags: LongInt): PSDL_Surface; |
30 | 504 |
var tmpsurf: PSDL_Surface; |
355 | 505 |
s: shortstring; |
4 | 506 |
begin |
4603 | 507 |
WriteToConsole(msgLoading + filename + '.png [flags: ' + inttostr(imageFlags) + '] '); |
2426 | 508 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
509 |
s:= filename + '.png'; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
510 |
tmpsurf:= IMG_Load(Str2PChar(s)); |
2254 | 511 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
512 |
if tmpsurf = nil then |
5562 | 513 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
514 |
OutError(msgFailed, (imageFlags and ifCritical) <> 0); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
515 |
exit(nil) |
5562 | 516 |
end; |
2153 | 517 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
518 |
if ((imageFlags and ifIgnoreCaps) = 0) and ((tmpsurf^.w > MaxTextureSize) or (tmpsurf^.h > MaxTextureSize)) then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
519 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
520 |
SDL_FreeSurface(tmpsurf); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
521 |
OutError(msgFailedSize, (imageFlags and ifCritical) <> 0); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
522 |
// dummy surface to replace non-critical textures that failed to load due to their size |
3862 | 523 |
exit(SDL_CreateRGBSurface(SDL_SWSURFACE, 2, 2, 32, RMask, GMask, BMask, AMask)); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
524 |
end; |
351 | 525 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
526 |
tmpsurf:= doSurfaceConversion(tmpsurf); |
2630 | 527 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
528 |
if (imageFlags and ifTransparent) <> 0 then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
529 |
TryDo(SDL_SetColorKey(tmpsurf, SDL_SRCCOLORKEY, 0) = 0, errmsgTransparentSet, true); |
2630 | 530 |
|
3407 | 531 |
WriteLnToConsole(msgOK + ' (' + inttostr(tmpsurf^.w) + 'x' + inttostr(tmpsurf^.h) + ')'); |
2630 | 532 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
533 |
LoadImage:= tmpsurf //Result |
753 | 534 |
end; |
535 |
||
4874 | 536 |
procedure LoadHedgehogHat(HHGear: PGear; newHat: shortstring); |
537 |
var texsurf: PSDL_Surface; |
|
538 |
begin |
|
5238
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
539 |
texsurf:= LoadImage(UserPathz[ptHats] + '/' + newHat, ifNone); |
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
540 |
if texsurf = nil then texsurf:= LoadImage(Pathz[ptHats] + '/' + newHat, ifNone); |
4874 | 541 |
|
542 |
// only do something if the hat could be loaded |
|
543 |
if texsurf <> nil then |
|
544 |
begin |
|
545 |
// free the mem of any previously assigned texture |
|
546 |
FreeTexture(HHGear^.Hedgehog^.HatTex); |
|
547 |
||
548 |
// assign new hat to hedgehog |
|
549 |
HHGear^.Hedgehog^.HatTex:= Surface2Tex(texsurf, true); |
|
550 |
||
551 |
// cleanup: free temporary surface mem |
|
552 |
SDL_FreeSurface(texsurf) |
|
553 |
end; |
|
554 |
end; |
|
555 |
||
2905 | 556 |
function glLoadExtension(extension : shortstring) : boolean; |
2428 | 557 |
begin |
4850 | 558 |
{$IF GLunit = gles11} |
4900 | 559 |
// FreePascal doesnt come with OpenGL ES 1.1 Extension headers |
3971 | 560 |
extension:= extension; // avoid hint |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
561 |
glLoadExtension:= false; |
3333 | 562 |
AddFileLog('OpenGL - "' + extension + '" skipped') |
2580
aeccc8f51d3f
completes touch input/control (problems with moving camera)
koda
parents:
2578
diff
changeset
|
563 |
{$ELSE} |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
564 |
glLoadExtension:= glext_LoadExtension(extension); |
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
565 |
if glLoadExtension then |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
566 |
AddFileLog('OpenGL - "' + extension + '" loaded') |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
567 |
else |
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
568 |
AddFileLog('OpenGL - "' + extension + '" failed to load'); |
2568
e654cbfb23ba
Bunch of neat stuff by Smaxx. ATI check, translucent name tags to reduce terrain fail, disabling health crates on invulnerable hogs. Also tweaks to prior stuff.
nemo
parents:
2567
diff
changeset
|
569 |
{$ENDIF} |
2428 | 570 |
end; |
571 |
||
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
572 |
procedure SetupOpenGLAttributes; |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
573 |
begin |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
574 |
{$IFDEF IPHONEOS} |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
575 |
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 0); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
576 |
SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 1); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
577 |
{$ELSE} |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
578 |
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
579 |
{$IFNDEF SDL13} // vsync is default in 1.3 |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
580 |
SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, LongInt((cReducedQuality and rqDesyncVBlank) = 0)); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
581 |
{$ENDIF} |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
582 |
{$ENDIF} |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
583 |
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0); // no depth buffer |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
584 |
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
585 |
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
586 |
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
587 |
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 0); // no alpha channel required |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
588 |
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 16); // buffer has to be 16 bit only |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
589 |
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); // try to prefer hardware rendering |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
590 |
end; |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
591 |
|
753 | 592 |
procedure SetupOpenGL; |
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
593 |
//var vendor: shortstring = ''; |
6021 | 594 |
var buf: array[byte] of char; |
5505
a55aab592950
Ditch the renderer system in sdl1.3 and use the 'old fashioned' sdl/opengl context. This gives us more flexibility and less problem in receiving video events (expecially on mobile platform) as well as not having to care to reset the gl context every time sdl interferes.
koda
parents:
5285
diff
changeset
|
595 |
begin |
6021 | 596 |
buf[0]:= char(0); // avoid compiler hint |
597 |
AddFileLog('Setting up OpenGL (using driver: ' + shortstring(SDL_VideoDriverName(buf, sizeof(buf))) + ')'); |
|
598 |
||
5505
a55aab592950
Ditch the renderer system in sdl1.3 and use the 'old fashioned' sdl/opengl context. This gives us more flexibility and less problem in receiving video events (expecially on mobile platform) as well as not having to care to reset the gl context every time sdl interferes.
koda
parents:
5285
diff
changeset
|
599 |
{$IFDEF SDL13} |
a55aab592950
Ditch the renderer system in sdl1.3 and use the 'old fashioned' sdl/opengl context. This gives us more flexibility and less problem in receiving video events (expecially on mobile platform) as well as not having to care to reset the gl context every time sdl interferes.
koda
parents:
5285
diff
changeset
|
600 |
// this function creates an opengles1.1 context by default on mobile devices |
a55aab592950
Ditch the renderer system in sdl1.3 and use the 'old fashioned' sdl/opengl context. This gives us more flexibility and less problem in receiving video events (expecially on mobile platform) as well as not having to care to reset the gl context every time sdl interferes.
koda
parents:
5285
diff
changeset
|
601 |
// use SDL_GL_SetAttribute to change this behaviour |
a55aab592950
Ditch the renderer system in sdl1.3 and use the 'old fashioned' sdl/opengl context. This gives us more flexibility and less problem in receiving video events (expecially on mobile platform) as well as not having to care to reset the gl context every time sdl interferes.
koda
parents:
5285
diff
changeset
|
602 |
SDLGLcontext:=SDL_GL_CreateContext(SDLwindow); |
a55aab592950
Ditch the renderer system in sdl1.3 and use the 'old fashioned' sdl/opengl context. This gives us more flexibility and less problem in receiving video events (expecially on mobile platform) as well as not having to care to reset the gl context every time sdl interferes.
koda
parents:
5285
diff
changeset
|
603 |
SDLTry(SDLGLcontext <> nil, true); |
a55aab592950
Ditch the renderer system in sdl1.3 and use the 'old fashioned' sdl/opengl context. This gives us more flexibility and less problem in receiving video events (expecially on mobile platform) as well as not having to care to reset the gl context every time sdl interferes.
koda
parents:
5285
diff
changeset
|
604 |
SDL_GL_SetSwapInterval(1); |
3928
2560731c860d
move all mobile-related functions in their own module, provides a structure for future mobile ports
koda
parents:
3922
diff
changeset
|
605 |
{$ENDIF} |
3405 | 606 |
|
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
607 |
// get the max (horizontal and vertical) size for textures that the gpu can support |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
608 |
glGetIntegerv(GL_MAX_TEXTURE_SIZE, @MaxTextureSize); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
609 |
if MaxTextureSize <= 0 then |
5215
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
610 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
611 |
MaxTextureSize:= 1024; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
612 |
AddFileLog('OpenGL Warning - driver didn''t provide any valid max texture size; assuming 1024'); |
5215
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
613 |
end |
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
614 |
else if (MaxTextureSize < 1024) and (MaxTextureSize >= 512) then |
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
615 |
begin |
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
616 |
cReducedQuality := cReducedQuality or rqNoBackground; |
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
617 |
AddFileLog('Texture size too small for backgrounds, disabling.'); |
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
618 |
end; |
2568
e654cbfb23ba
Bunch of neat stuff by Smaxx. ATI check, translucent name tags to reduce terrain fail, disabling health crates on invulnerable hogs. Also tweaks to prior stuff.
nemo
parents:
2567
diff
changeset
|
619 |
|
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
620 |
(* // find out which gpu we are using (for extension compatibility maybe?) |
3692 | 621 |
{$IFDEF IPHONEOS} |
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
622 |
vendor:= vendor; // avoid hint |
3692 | 623 |
cGPUVendor:= gvApple; |
624 |
{$ELSE} |
|
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
625 |
vendor:= LowerCase(shortstring(pchar(glGetString(GL_VENDOR)))); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
626 |
if StrPos(Str2PChar(vendor), Str2PChar('nvidia')) <> nil then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
627 |
cGPUVendor:= gvNVIDIA |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
628 |
else if StrPos(Str2PChar(vendor), Str2PChar('intel')) <> nil then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
629 |
cGPUVendor:= gvATI |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
630 |
else if StrPos(Str2PChar(vendor), Str2PChar('ati')) <> nil then |
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
631 |
cGPUVendor:= gvIntel |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
632 |
else |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
633 |
AddFileLog('OpenGL Warning - unknown hardware vendor; please report'); |
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
634 |
{$ENDIF} |
2647 | 635 |
//SupportNPOTT:= glLoadExtension('GL_ARB_texture_non_power_of_two'); |
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
636 |
*) |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
637 |
|
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
638 |
// everyone love debugging |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
639 |
AddFileLog('OpenGL-- Renderer: ' + shortstring(pchar(glGetString(GL_RENDERER)))); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
640 |
AddFileLog(' |----- Vendor: ' + shortstring(pchar(glGetString(GL_VENDOR)))); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
641 |
AddFileLog(' |----- Version: ' + shortstring(pchar(glGetString(GL_VERSION)))); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
642 |
AddFileLog(' \----- Texture Size: ' + inttostr(MaxTextureSize)); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
643 |
|
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
644 |
{$IFNDEF S3D_DISABLED} |
3696 | 645 |
if (cStereoMode = smHorizontal) or (cStereoMode = smVertical) or (cStereoMode = smAFR) then |
3692 | 646 |
begin |
647 |
// prepare left and right frame buffers and associated textures |
|
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
648 |
if glLoadExtension('GL_EXT_framebuffer_object') then |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
649 |
begin |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
650 |
// left |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
651 |
glGenFramebuffersEXT(1, @framel); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
652 |
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framel); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
653 |
glGenRenderbuffersEXT(1, @depthl); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
654 |
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthl); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
655 |
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, cScreenWidth, cScreenHeight); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
656 |
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depthl); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
657 |
glGenTextures(1, @texl); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
658 |
glBindTexture(GL_TEXTURE_2D, texl); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
659 |
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, cScreenWidth, cScreenHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
660 |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
661 |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
662 |
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, texl, 0); |
3692 | 663 |
|
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
664 |
// right |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
665 |
glGenFramebuffersEXT(1, @framer); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
666 |
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framer); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
667 |
glGenRenderbuffersEXT(1, @depthr); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
668 |
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthr); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
669 |
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, cScreenWidth, cScreenHeight); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
670 |
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depthr); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
671 |
glGenTextures(1, @texr); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
672 |
glBindTexture(GL_TEXTURE_2D, texr); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
673 |
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, cScreenWidth, cScreenHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
674 |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
675 |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
676 |
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, texr, 0); |
3692 | 677 |
|
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
678 |
// reset |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
679 |
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0) |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
680 |
end |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
681 |
else |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
682 |
cStereoMode:= smNone; |
3692 | 683 |
end; |
2735 | 684 |
{$ENDIF} |
685 |
||
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
686 |
// set view port to whole window |
3940
cc29628976cc
some optimizations to drawing and fetching data of new ammomenu
koda
parents:
3939
diff
changeset
|
687 |
if (rotationQt = 0) or (rotationQt = 180) then |
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3906
diff
changeset
|
688 |
glViewport(0, 0, cScreenWidth, cScreenHeight) |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3906
diff
changeset
|
689 |
else |
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3906
diff
changeset
|
690 |
glViewport(0, 0, cScreenHeight, cScreenWidth); |
2428 | 691 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
692 |
glMatrixMode(GL_MODELVIEW); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
693 |
// prepare default translation/scaling |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
694 |
glLoadIdentity(); |
3394
47b51e22e670
Henek's patch - adds a column to ammoMenu and removes the F* column in iphone version
koda
parents:
3390
diff
changeset
|
695 |
glRotatef(rotationQt, 0, 0, 1); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
696 |
glScalef(2.0 / cScreenWidth, -2.0 / cScreenHeight, 1.0); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
697 |
glTranslatef(0, -cScreenHeight / 2, 0); |
2428 | 698 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
699 |
// enable alpha blending |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
700 |
glEnable(GL_BLEND); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
701 |
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
5045
f215eb5d4b75
this supposedly makes hwengine work with sdl 1.3 past rev 5296
koda
parents:
5043
diff
changeset
|
702 |
// disable/lower perspective correction (will not need it anyway) |
3376 | 703 |
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); |
704 |
// disable dithering |
|
705 |
glDisable(GL_DITHER); |
|
3641 | 706 |
// enable common states by default as they save a lot |
3376 | 707 |
glEnable(GL_TEXTURE_2D); |
3697 | 708 |
glEnableClientState(GL_VERTEX_ARRAY); |
709 |
glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
|
4 | 710 |
end; |
711 |
||
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2154
diff
changeset
|
712 |
procedure SetScale(f: GLfloat); |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2154
diff
changeset
|
713 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
714 |
// leave immediately if scale factor did not change |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
715 |
if f = cScaleFactor then exit; |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2154
diff
changeset
|
716 |
|
3523 | 717 |
if f = cDefaultZoomLevel then |
718 |
glPopMatrix // "return" to default scaling |
|
719 |
else // other scaling |
|
3394
47b51e22e670
Henek's patch - adds a column to ammoMenu and removes the F* column in iphone version
koda
parents:
3390
diff
changeset
|
720 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
721 |
glPushMatrix; // save default scaling |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
722 |
glLoadIdentity; |
3394
47b51e22e670
Henek's patch - adds a column to ammoMenu and removes the F* column in iphone version
koda
parents:
3390
diff
changeset
|
723 |
glRotatef(rotationQt, 0, 0, 1); |
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3906
diff
changeset
|
724 |
glScalef(f / cScreenWidth, -f / cScreenHeight, 1.0); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
725 |
glTranslatef(0, -cScreenHeight / 2, 0); |
3394
47b51e22e670
Henek's patch - adds a column to ammoMenu and removes the F* column in iphone version
koda
parents:
3390
diff
changeset
|
726 |
end; |
2258 | 727 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
728 |
cScaleFactor:= f; |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2154
diff
changeset
|
729 |
end; |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2154
diff
changeset
|
730 |
|
510 | 731 |
//////////////////////////////////////////////////////////////////////////////// |
732 |
procedure AddProgress; |
|
733 |
var r: TSDL_Rect; |
|
766 | 734 |
texsurf: PSDL_Surface; |
510 | 735 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
736 |
if Step = 0 then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
737 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
738 |
WriteToConsole(msgLoading + 'progress sprite: '); |
5238
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
739 |
texsurf:= LoadImage(UserPathz[ptGraphics] + '/Progress', ifTransparent); |
46ddaf14509d
Enable ~/.hedgewars/Data (or platform equivalent) to override/extend pretty much everything in system Data dir. Obviously desyncing can occur, so this is at user's own risk. Should simplify map etc install. Needs testing.
nemo
parents:
5215
diff
changeset
|
740 |
if texsurf = nil then texsurf:= LoadImage(Pathz[ptGraphics] + '/Progress', ifCritical or ifTransparent); |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2705
diff
changeset
|
741 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
742 |
ProgrTex:= Surface2Tex(texsurf, false); |
3697 | 743 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
744 |
squaresize:= texsurf^.w shr 1; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
745 |
numsquares:= texsurf^.h div squaresize; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
746 |
SDL_FreeSurface(texsurf); |
3928
2560731c860d
move all mobile-related functions in their own module, provides a structure for future mobile ports
koda
parents:
3922
diff
changeset
|
747 |
|
5174
f5294509783e
initial refactoring of ObjcExports and OverlayViewController
koda
parents:
5167
diff
changeset
|
748 |
uMobile.GameLoading(); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
749 |
end; |
1045 | 750 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
751 |
TryDo(ProgrTex <> nil, 'Error - Progress Texure is nil!', true); |
2284 | 752 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
753 |
glClear(GL_COLOR_BUFFER_BIT); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
754 |
if Step < numsquares then r.x:= 0 |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
755 |
else r.x:= squaresize; |
3697 | 756 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
757 |
r.y:= (Step mod numsquares) * squaresize; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
758 |
r.w:= squaresize; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
759 |
r.h:= squaresize; |
3697 | 760 |
|
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3906
diff
changeset
|
761 |
DrawFromRect( -squaresize div 2, (cScreenHeight - squaresize) shr 1, @r, ProgrTex); |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2705
diff
changeset
|
762 |
|
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2705
diff
changeset
|
763 |
{$IFDEF SDL13} |
5505
a55aab592950
Ditch the renderer system in sdl1.3 and use the 'old fashioned' sdl/opengl context. This gives us more flexibility and less problem in receiving video events (expecially on mobile platform) as well as not having to care to reset the gl context every time sdl interferes.
koda
parents:
5285
diff
changeset
|
764 |
SDL_GL_SwapWindow(SDLwindow); |
5043
2df62e1a6c02
glswapbuffer consistency and create the window in the center (still, it doesn't work past sdl r5296)
koda
parents:
5018
diff
changeset
|
765 |
{$ELSE} |
2df62e1a6c02
glswapbuffer consistency and create the window in the center (still, it doesn't work past sdl r5296)
koda
parents:
5018
diff
changeset
|
766 |
SDL_GL_SwapBuffers(); |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2705
diff
changeset
|
767 |
{$ENDIF} |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
768 |
inc(Step); |
510 | 769 |
end; |
770 |
||
771 |
procedure FinishProgress; |
|
772 |
begin |
|
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
773 |
uMobile.GameLoaded(); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
774 |
WriteLnToConsole('Freeing progress surface... '); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
775 |
FreeTexture(ProgrTex); |
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
776 |
ProgrTex:= nil; |
5714 | 777 |
Step:= 0 |
510 | 778 |
end; |
779 |
||
2905 | 780 |
function RenderHelpWindow(caption, subcaption, description, extra: ansistring; extracolor: LongInt; iconsurf: PSDL_Surface; iconrect: PSDL_Rect): PTexture; |
2747 | 781 |
var tmpsurf: PSDL_SURFACE; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
782 |
w, h, i, j: LongInt; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
783 |
font: THWFont; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
784 |
r, r2: TSDL_Rect; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
785 |
wa, ha: LongInt; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
786 |
tmpline, tmpline2, tmpdesc: ansistring; |
2747 | 787 |
begin |
2843 | 788 |
// make sure there is a caption as well as a sub caption - description is optional |
789 |
if caption = '' then caption:= '???'; |
|
790 |
if subcaption = '' then subcaption:= ' '; |
|
791 |
||
2841 | 792 |
font:= CheckCJKFont(caption,fnt16); |
793 |
font:= CheckCJKFont(subcaption,font); |
|
794 |
font:= CheckCJKFont(description,font); |
|
795 |
font:= CheckCJKFont(extra,font); |
|
2747 | 796 |
|
797 |
w:= 0; |
|
798 |
h:= 0; |
|
799 |
wa:= FontBorder * 2 + 4; |
|
800 |
ha:= FontBorder * 2; |
|
801 |
||
3407 | 802 |
i:= 0; j:= 0; // avoid compiler hints |
803 |
||
2747 | 804 |
// TODO: Recheck height/position calculation |
805 |
||
806 |
// get caption's dimensions |
|
6286
835392304f81
and while we are giving SDLh.pas all this love, let's fix the signature of one SDL_ttf calls
koda
parents:
6089
diff
changeset
|
807 |
TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(caption), @i, @j); |
2747 | 808 |
// width adds 36 px (image + space) |
809 |
w:= i + 36 + wa; |
|
810 |
h:= j + ha; |
|
811 |
||
812 |
// get sub caption's dimensions |
|
6286
835392304f81
and while we are giving SDLh.pas all this love, let's fix the signature of one SDL_ttf calls
koda
parents:
6089
diff
changeset
|
813 |
TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(subcaption), @i, @j); |
2747 | 814 |
// width adds 36 px (image + space) |
815 |
if w < (i + 36 + wa) then w:= i + 36 + wa; |
|
816 |
inc(h, j + ha); |
|
817 |
||
818 |
// get description's dimensions |
|
819 |
tmpdesc:= description; |
|
820 |
while tmpdesc <> '' do |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
821 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
822 |
tmpline:= tmpdesc; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
823 |
SplitByChar(tmpline, tmpdesc, '|'); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
824 |
if tmpline <> '' then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
825 |
begin |
6286
835392304f81
and while we are giving SDLh.pas all this love, let's fix the signature of one SDL_ttf calls
koda
parents:
6089
diff
changeset
|
826 |
TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(tmpline), @i, @j); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
827 |
if w < (i + wa) then w:= i + wa; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
828 |
inc(h, j + ha) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
829 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
830 |
end; |
2747 | 831 |
|
832 |
if extra <> '' then |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
833 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
834 |
// get extra label's dimensions |
6286
835392304f81
and while we are giving SDLh.pas all this love, let's fix the signature of one SDL_ttf calls
koda
parents:
6089
diff
changeset
|
835 |
TTF_SizeUTF8(Fontz[font].Handle, Str2PChar(extra), @i, @j); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
836 |
if w < (i + wa) then w:= i + wa; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
837 |
inc(h, j + ha); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
838 |
end; |
3697 | 839 |
|
2747 | 840 |
// add borders space |
841 |
inc(w, wa); |
|
842 |
inc(h, ha + 8); |
|
843 |
||
844 |
tmpsurf:= SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 32, RMask, GMask, BMask, AMask); |
|
845 |
TryDo(tmpsurf <> nil, 'RenderHelpWindow: fail to create surface', true); |
|
846 |
||
847 |
// render border and background |
|
848 |
r.x:= 0; |
|
849 |
r.y:= 0; |
|
850 |
r.w:= w; |
|
851 |
r.h:= h; |
|
852 |
DrawRoundRect(@r, cWhiteColor, cNearBlackColor, tmpsurf, true); |
|
853 |
||
854 |
// render caption |
|
855 |
r:= WriteInRect(tmpsurf, 36 + FontBorder + 2, ha, $ffffffff, font, caption); |
|
856 |
// render sub caption |
|
857 |
r:= WriteInRect(tmpsurf, 36 + FontBorder + 2, r.y + r.h, $ffc7c7c7, font, subcaption); |
|
858 |
||
859 |
// render all description lines |
|
860 |
tmpdesc:= description; |
|
861 |
while tmpdesc <> '' do |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
862 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
863 |
tmpline:= tmpdesc; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
864 |
SplitByChar(tmpline, tmpdesc, '|'); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
865 |
r2:= r; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
866 |
if tmpline <> '' then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
867 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
868 |
r:= WriteInRect(tmpsurf, FontBorder + 2, r.y + r.h, $ff707070, font, tmpline); |
3697 | 869 |
|
5518 | 870 |
// render highlighted caption (if there is a ':') |
3407 | 871 |
tmpline2:= ''; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
872 |
SplitByChar(tmpline, tmpline2, ':'); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
873 |
if tmpline2 <> '' then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
874 |
WriteInRect(tmpsurf, FontBorder + 2, r2.y + r2.h, $ffc7c7c7, font, tmpline + ':'); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
875 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
876 |
end; |
2747 | 877 |
|
878 |
if extra <> '' then |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
879 |
r:= WriteInRect(tmpsurf, FontBorder + 2, r.y + r.h, extracolor, font, extra); |
2747 | 880 |
|
881 |
r.x:= FontBorder + 6; |
|
882 |
r.y:= FontBorder + 4; |
|
883 |
r.w:= 32; |
|
884 |
r.h:= 32; |
|
885 |
SDL_FillRect(tmpsurf, @r, $ffffffff); |
|
886 |
SDL_UpperBlit(iconsurf, iconrect, tmpsurf, @r); |
|
3697 | 887 |
|
2747 | 888 |
RenderHelpWindow:= Surface2Tex(tmpsurf, true); |
889 |
SDL_FreeSurface(tmpsurf) |
|
890 |
end; |
|
891 |
||
892 |
procedure RenderWeaponTooltip(atype: TAmmoType); |
|
893 |
var r: TSDL_Rect; |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
894 |
i: LongInt; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
895 |
extra: ansistring; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
896 |
extracolor: LongInt; |
2747 | 897 |
begin |
3634 | 898 |
// don't do anything if the window shouldn't be shown |
899 |
if (cReducedQuality and rqTooltipsOff) <> 0 then |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
900 |
begin |
3634 | 901 |
WeaponTooltipTex:= nil; |
902 |
exit |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
903 |
end; |
2747 | 904 |
|
905 |
// free old texture |
|
906 |
FreeWeaponTooltip; |
|
907 |
||
908 |
// image region |
|
909 |
i:= LongInt(atype) - 1; |
|
3853 | 910 |
r.x:= (i shr 4) * 32; |
911 |
r.y:= (i mod 16) * 32; |
|
2747 | 912 |
r.w:= 32; |
913 |
r.h:= 32; |
|
914 |
||
915 |
// default (no extra text) |
|
916 |
extra:= ''; |
|
917 |
extracolor:= 0; |
|
918 |
||
919 |
if (CurrentTeam <> nil) and (Ammoz[atype].SkipTurns >= CurrentTeam^.Clan^.TurnNumber) then // weapon or utility is not yet available |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
920 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
921 |
extra:= trmsg[sidNotYetAvailable]; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
922 |
extracolor:= LongInt($ffc77070); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
923 |
end |
5518 | 924 |
else if (Ammoz[atype].Ammo.Propz and ammoprop_NoRoundEnd) <> 0 then // weapon or utility will not end your turn |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
925 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
926 |
extra:= trmsg[sidNoEndTurn]; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
927 |
extracolor:= LongInt($ff70c770); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
928 |
end |
3697 | 929 |
else |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
930 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
931 |
extra:= ''; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
932 |
extracolor:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
933 |
end; |
2747 | 934 |
|
935 |
// render window and return the texture |
|
936 |
WeaponTooltipTex:= RenderHelpWindow(trammo[Ammoz[atype].NameId], trammoc[Ammoz[atype].NameId], trammod[Ammoz[atype].NameId], extra, extracolor, SpritesData[sprAMAmmos].Surface, @r) |
|
2753 | 937 |
end; |
2747 | 938 |
|
939 |
procedure ShowWeaponTooltip(x, y: LongInt); |
|
940 |
begin |
|
941 |
// draw the texture if it exists |
|
942 |
if WeaponTooltipTex <> nil then |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
943 |
DrawTexture(x, y, WeaponTooltipTex) |
2747 | 944 |
end; |
945 |
||
946 |
procedure FreeWeaponTooltip; |
|
947 |
begin |
|
5045
f215eb5d4b75
this supposedly makes hwengine work with sdl 1.3 past rev 5296
koda
parents:
5043
diff
changeset
|
948 |
// free the existing texture (if there is any) |
2747 | 949 |
FreeTexture(WeaponTooltipTex); |
950 |
WeaponTooltipTex:= nil |
|
951 |
end; |
|
952 |
||
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
953 |
procedure chFullScr(var s: shortstring); |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
954 |
var flags: Longword = 0; |
6072 | 955 |
reinit: boolean = false; |
956 |
{$IFNDEF DARWIN}ico: PSDL_Surface;{$ENDIF} |
|
5052 | 957 |
{$IFDEF SDL13}x, y: LongInt;{$ENDIF} |
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
958 |
begin |
6453
11c578d30bd3
Countless imporvements to the parser and countless help to the parser in sources.
unc0rr
parents:
6415
diff
changeset
|
959 |
if Length(s) = 0 then cFullScreen:= (not cFullScreen) |
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
960 |
else cFullScreen:= s = '1'; |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
961 |
|
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
962 |
AddFileLog('Preparing to change video parameters...'); |
6021 | 963 |
{$IFNDEF IPHONEOS} |
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
964 |
if SDLPrimSurface = nil then |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
965 |
begin |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
966 |
// set window title |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
967 |
SDL_WM_SetCaption('Hedgewars', nil); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
968 |
WriteToConsole('Init SDL_image... '); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
969 |
SDLTry(IMG_Init(IMG_INIT_PNG) <> 0, true); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
970 |
WriteLnToConsole(msgOK); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
971 |
// load engine icon |
6072 | 972 |
{$IFNDEF DARWIN} |
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
973 |
ico:= LoadImage(UserPathz[ptGraphics] + '/hwengine', ifIgnoreCaps); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
974 |
if ico = nil then ico:= LoadImage(Pathz[ptGraphics] + '/hwengine', ifIgnoreCaps); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
975 |
if ico <> nil then |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
976 |
begin |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
977 |
SDL_WM_SetIcon(ico, 0); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
978 |
SDL_FreeSurface(ico) |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
979 |
end; |
6089 | 980 |
{$ENDIF} |
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
981 |
end |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
982 |
else |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
983 |
begin |
5847 | 984 |
SetScale(cDefaultZoomLevel); |
5712 | 985 |
{$IF DEFINED(DARWIN) OR DEFINED(WIN32)} |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
986 |
reinit:= true; |
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
987 |
StoreRelease(true); |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
988 |
ResetLand; |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
989 |
ResetWorldTex; |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
990 |
//uTextures.freeModule; //DEBUG ONLY |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
991 |
{$ENDIF} |
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
992 |
AddFileLog('Freeing old primary surface...'); |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
993 |
SDL_FreeSurface(SDLPrimSurface); |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
994 |
SDLPrimSurface:= nil; |
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
995 |
end; |
6021 | 996 |
{$ENDIF} |
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
997 |
|
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
998 |
// these attributes must be set up before creating the sdl window |
5883
a6d764786905
Disable GL SetAttributes for Windows due to many testers with problems. This restores .15 behaviour.
nemo
parents:
5847
diff
changeset
|
999 |
{$IFNDEF WIN32} |
a6d764786905
Disable GL SetAttributes for Windows due to many testers with problems. This restores .15 behaviour.
nemo
parents:
5847
diff
changeset
|
1000 |
(* On a large number of testers machines, SDL default to software rendering when opengl attributes were set. |
a6d764786905
Disable GL SetAttributes for Windows due to many testers with problems. This restores .15 behaviour.
nemo
parents:
5847
diff
changeset
|
1001 |
These attributes were "set" after CreateWindow in .15, which probably did nothing. |
a6d764786905
Disable GL SetAttributes for Windows due to many testers with problems. This restores .15 behaviour.
nemo
parents:
5847
diff
changeset
|
1002 |
IMO we should rely on the gl_config defaults from SDL, and use SDL_GL_GetAttribute to possibly post warnings if any |
a6d764786905
Disable GL SetAttributes for Windows due to many testers with problems. This restores .15 behaviour.
nemo
parents:
5847
diff
changeset
|
1003 |
bad values are set. *) |
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
1004 |
SetupOpenGLAttributes(); |
5883
a6d764786905
Disable GL SetAttributes for Windows due to many testers with problems. This restores .15 behaviour.
nemo
parents:
5847
diff
changeset
|
1005 |
{$ENDIF} |
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
1006 |
{$IFDEF SDL13} |
5187 | 1007 |
// these values in x and y make the window appear in the center |
1008 |
x:= SDL_WINDOWPOS_CENTERED_MASK; |
|
1009 |
y:= SDL_WINDOWPOS_CENTERED_MASK; |
|
1010 |
flags:= SDL_WINDOW_OPENGL or SDL_WINDOW_SHOWN; |
|
1011 |
||
5286 | 1012 |
{$IFDEF MOBILE} |
5187 | 1013 |
// make the sdl window appear on the second monitor when present |
1014 |
x:= x or (SDL_GetNumVideoDisplays() - 1); |
|
1015 |
y:= y or (SDL_GetNumVideoDisplays() - 1); |
|
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
1016 |
|
5662
99083392cd4f
FREE AT LAST!!! SDL came around a (mostly) sane way for implementing rotation events, so we can scrap all the workaround code that has been added to workaround it!! Also this allows us to use proper (internal) multitasking handling and can simplify optional settings and other yet unexplored features. Yay!
koda
parents:
5660
diff
changeset
|
1017 |
SDL_SetHint('SDL_IOS_ORIENTATIONS','LandscapeLeft LandscapeRight'); |
99083392cd4f
FREE AT LAST!!! SDL came around a (mostly) sane way for implementing rotation events, so we can scrap all the workaround code that has been added to workaround it!! Also this allows us to use proper (internal) multitasking handling and can simplify optional settings and other yet unexplored features. Yay!
koda
parents:
5660
diff
changeset
|
1018 |
flags:= flags or SDL_WINDOW_BORDERLESS or SDL_WINDOW_RESIZABLE; |
5187 | 1019 |
{$ENDIF} |
1020 |
||
6021 | 1021 |
if SDLwindow = nil then |
1022 |
if cFullScreen then SDLwindow:= SDL_CreateWindow('Hedgewars', x, y, cOrigScreenWidth, cOrigScreenHeight, flags or SDL_WINDOW_FULLSCREEN) |
|
1023 |
else SDLwindow:= SDL_CreateWindow('Hedgewars', x, y, cScreenWidth, cScreenHeight, flags); |
|
5187 | 1024 |
SDLTry(SDLwindow <> nil, true); |
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
1025 |
{$ELSE} |
5670
e01f0b6f1969
enable window resizing (tested only on linux) - fix issue 103
koda
parents:
5662
diff
changeset
|
1026 |
flags:= SDL_OPENGL or SDL_RESIZABLE; |
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
1027 |
if cFullScreen then |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
1028 |
flags:= flags or SDL_FULLSCREEN; |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
1029 |
|
5130
3602ede67ec5
Add a parameter for game simulation with no gui/sound enabled, just to get statistics
unc0rr
parents:
5109
diff
changeset
|
1030 |
if not cOnlyStats then |
3602ede67ec5
Add a parameter for game simulation with no gui/sound enabled, just to get statistics
unc0rr
parents:
5109
diff
changeset
|
1031 |
begin |
5565 | 1032 |
{$IFDEF WIN32} |
1033 |
s:= SDL_getenv('SDL_VIDEO_CENTERED'); |
|
1034 |
SDL_putenv('SDL_VIDEO_CENTERED=1'); |
|
1035 |
{$ENDIF} |
|
5130
3602ede67ec5
Add a parameter for game simulation with no gui/sound enabled, just to get statistics
unc0rr
parents:
5109
diff
changeset
|
1036 |
SDLPrimSurface:= SDL_SetVideoMode(cScreenWidth, cScreenHeight, cBits, flags); |
3602ede67ec5
Add a parameter for game simulation with no gui/sound enabled, just to get statistics
unc0rr
parents:
5109
diff
changeset
|
1037 |
SDLTry(SDLPrimSurface <> nil, true); |
5565 | 1038 |
{$IFDEF WIN32}SDL_putenv(str2pchar('SDL_VIDEO_CENTERED=' + s));{$ENDIF} |
5130
3602ede67ec5
Add a parameter for game simulation with no gui/sound enabled, just to get statistics
unc0rr
parents:
5109
diff
changeset
|
1039 |
end; |
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
1040 |
{$ENDIF} |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
1041 |
|
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
1042 |
SetupOpenGL(); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
1043 |
if reinit then |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
1044 |
begin |
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
1045 |
// clean the window from any previous content |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
1046 |
glClear(GL_COLOR_BUFFER_BIT); |
5704 | 1047 |
if SuddenDeathDmg then |
1048 |
glClearColor(SDSkyColor.r * (SDTint/255) / 255, SDSkyColor.g * (SDTint/255) / 255, SDSkyColor.b * (SDTint/255) / 255, 0.99) |
|
1049 |
else if ((cReducedQuality and rqNoBackground) = 0) then |
|
5654 | 1050 |
glClearColor(SkyColor.r / 255, SkyColor.g / 255, SkyColor.b / 255, 0.99) |
1051 |
else glClearColor(RQSkyColor.r / 255, RQSkyColor.g / 255, RQSkyColor.b / 255, 0.99); |
|
5704 | 1052 |
|
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
1053 |
// reload everything we had before |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
1054 |
ReloadCaptions(false); |
6382
0e76c5cd4250
move the order of reloading texture to workaround buggy drivers
koda
parents:
6380
diff
changeset
|
1055 |
ReloadLines; |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
1056 |
StoreLoad(true); |
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
1057 |
// redraw all land |
6382
0e76c5cd4250
move the order of reloading texture to workaround buggy drivers
koda
parents:
6380
diff
changeset
|
1058 |
UpdateLandTexture(0, LAND_WIDTH, 0, LAND_HEIGHT); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
1059 |
end; |
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
1060 |
end; |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
1061 |
|
3038 | 1062 |
procedure initModule; |
4925 | 1063 |
var ai: TAmmoType; |
1064 |
i: LongInt; |
|
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
1065 |
begin |
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
1066 |
RegisterVariable('fullscr', vtCommand, @chFullScr, true); |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
1067 |
|
3394
47b51e22e670
Henek's patch - adds a column to ammoMenu and removes the F* column in iphone version
koda
parents:
3390
diff
changeset
|
1068 |
SDLPrimSurface:= nil; |
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3906
diff
changeset
|
1069 |
|
3626 | 1070 |
rotationQt:= 0; |
3394
47b51e22e670
Henek's patch - adds a column to ammoMenu and removes the F* column in iphone version
koda
parents:
3390
diff
changeset
|
1071 |
cScaleFactor:= 2.0; |
47b51e22e670
Henek's patch - adds a column to ammoMenu and removes the F* column in iphone version
koda
parents:
3390
diff
changeset
|
1072 |
Step:= 0; |
47b51e22e670
Henek's patch - adds a column to ammoMenu and removes the F* column in iphone version
koda
parents:
3390
diff
changeset
|
1073 |
ProgrTex:= nil; |
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
1074 |
SupportNPOTT:= false; |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
1075 |
// cGPUVendor:= gvUnknown; |
4925 | 1076 |
|
1077 |
// init all ammo name texture pointers |
|
1078 |
for ai:= Low(TAmmoType) to High(TAmmoType) do |
|
1079 |
begin |
|
1080 |
Ammoz[ai].NameTex := nil; |
|
1081 |
end; |
|
1082 |
// init all count texture pointers |
|
1083 |
for i:= Low(CountTexz) to High(CountTexz) do |
|
1084 |
CountTexz[i] := nil; |
|
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
1085 |
end; |
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
1086 |
|
3038 | 1087 |
procedure freeModule; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2705
diff
changeset
|
1088 |
begin |
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2705
diff
changeset
|
1089 |
end; |
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2705
diff
changeset
|
1090 |
|
4 | 1091 |
end. |