author | Wuzzy <almikes@aol.com> |
Wed, 13 Apr 2016 01:53:25 +0200 | |
changeset 11723 | 456f4e9f9dce |
parent 11539 | c22d292e7266 |
child 11822 | 4600dcb9db4f |
permissions | -rw-r--r-- |
4 | 1 |
(* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
11046 | 3 |
* Copyright (c) 2004-2015 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 |
|
10108
c68cf030eded
update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents:
10104
diff
changeset
|
16 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 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 |
|
7043
7c080e5ac8d0
Some work to make more units compile after conversion to c
unc0rr
parents:
7028
diff
changeset
|
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 |
|
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6982
diff
changeset
|
29 |
procedure StoreLoad(reload: boolean); |
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6982
diff
changeset
|
30 |
procedure StoreRelease(reload: boolean); |
4 | 31 |
procedure RenderHealth(var Hedgehog: THedgehog); |
9656 | 32 |
function makeHealthBarTexture(w, h, Color: Longword): PTexture; |
4 | 33 |
procedure AddProgress; |
510 | 34 |
procedure FinishProgress; |
2905 | 35 |
function LoadImage(const filename: shortstring; imageFlags: LongInt): PSDL_Surface; |
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
36 |
|
8145
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8138
diff
changeset
|
37 |
// loads an image from the games data files |
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
38 |
function LoadDataImage(const path: TPathType; const filename: shortstring; imageFlags: LongInt): PSDL_Surface; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
39 |
// like LoadDataImage but uses altPath as fallback-path if file not found/loadable in path |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
40 |
function LoadDataImageAltPath(const path, altPath: TPathType; const filename: shortstring; imageFlags: LongInt): PSDL_Surface; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
41 |
// like LoadDataImage but uses altFile as fallback-filename if file cannot be loaded |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
42 |
function LoadDataImageAltFile(const path: TPathType; const filename, altFile: shortstring; imageFlags: LongInt): PSDL_Surface; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
43 |
|
7754 | 44 |
procedure LoadHedgehogHat(var HH: THedgehog; newHat: shortstring); |
10262 | 45 |
procedure LoadHedgehogHat2(var HH: THedgehog; newHat: shortstring; allowSurfReuse: boolean); |
46 |
||
10302
ea0b0e2efd95
huh? me? nono, don't mind me. I'm just here to clean up.
sheepluva
parents:
10276
diff
changeset
|
47 |
procedure InitZoom(zoom: real); |
ea0b0e2efd95
huh? me? nono, don't mind me. I'm just here to clean up.
sheepluva
parents:
10276
diff
changeset
|
48 |
|
753 | 49 |
procedure SetupOpenGL; |
3394
47b51e22e670
Henek's patch - adds a column to ammoMenu and removes the F* column in iphone version
koda
parents:
3390
diff
changeset
|
50 |
function RenderHelpWindow(caption, subcaption, description, extra: ansistring; extracolor: LongInt; iconsurf: PSDL_Surface; iconrect: PSDL_Rect): PTexture; |
2747 | 51 |
procedure RenderWeaponTooltip(atype: TAmmoType); |
52 |
procedure ShowWeaponTooltip(x, y: LongInt); |
|
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
|
53 |
procedure MakeCrossHairs; |
7235
baa69bd025d9
1. Implement new page in frontend with options for video recording.
Stepan777 <stepik-777@mail.ru>
parents:
7198
diff
changeset
|
54 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 55 |
procedure InitOffscreenOpenGL; |
7235
baa69bd025d9
1. Implement new page in frontend with options for video recording.
Stepan777 <stepik-777@mail.ru>
parents:
7198
diff
changeset
|
56 |
{$ENDIF} |
4 | 57 |
|
7049 | 58 |
procedure WarpMouse(x, y: Word); inline; |
7866
58d10edc5d21
apparently we are forced to use a (dummy) callback for glut 3.0 compatibility
koda
parents:
7754
diff
changeset
|
59 |
procedure SwapBuffers; {$IFDEF USE_VIDEO_RECORDING}cdecl{$ELSE}inline{$ENDIF}; |
9295
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
60 |
procedure SetSkyColor(r, g, b: real); |
7049 | 61 |
|
4 | 62 |
implementation |
10015 | 63 |
uses uMisc, uConsole, uVariables, uUtils, uTextures, uRender, uRenderUtils, |
64 |
uCommands, uPhysFSLayer, uDebug |
|
11360 | 65 |
{$IFDEF USE_CONTEXT_RESTORE}, uWorld{$ENDIF}; |
4 | 66 |
|
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
|
67 |
//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
|
68 |
|
11362 | 69 |
var |
7049 | 70 |
SDLwindow: PSDL_Window; |
71 |
SDLGLcontext: PSDL_GLContext; |
|
8145
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8138
diff
changeset
|
72 |
squaresize : LongInt; |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8138
diff
changeset
|
73 |
numsquares : LongInt; |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8138
diff
changeset
|
74 |
ProgrTex: PTexture; |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8138
diff
changeset
|
75 |
|
10262 | 76 |
prevHat: shortstring; |
77 |
tmpHatSurf: PSDL_Surface; |
|
78 |
||
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
79 |
const |
8145
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8138
diff
changeset
|
80 |
cHHFileName = 'Hedgehog'; |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8138
diff
changeset
|
81 |
cCHFileName = 'Crosshair'; |
4 | 82 |
|
10262 | 83 |
procedure freeTmpHatSurf(); |
84 |
begin |
|
85 |
if tmpHatSurf = nil then exit; |
|
86 |
SDL_FreeSurface(tmpHatSurf); |
|
87 |
tmpHatSurf:= nil; |
|
88 |
prevHat:= 'NoHat'; |
|
89 |
end; |
|
7188
580cd247511e
Removed leftover FFP code: We should now be GL2 GLSL1.30+ forward compatible.
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
7186
diff
changeset
|
90 |
|
10302
ea0b0e2efd95
huh? me? nono, don't mind me. I'm just here to clean up.
sheepluva
parents:
10276
diff
changeset
|
91 |
procedure InitZoom(zoom: real); |
ea0b0e2efd95
huh? me? nono, don't mind me. I'm just here to clean up.
sheepluva
parents:
10276
diff
changeset
|
92 |
begin |
ea0b0e2efd95
huh? me? nono, don't mind me. I'm just here to clean up.
sheepluva
parents:
10276
diff
changeset
|
93 |
SetScale(zoom); |
10644
3b8290381fcb
make sure view limits are updated at start of game
sheepluva
parents:
10640
diff
changeset
|
94 |
// make sure view limits are updated |
3b8290381fcb
make sure view limits are updated at start of game
sheepluva
parents:
10640
diff
changeset
|
95 |
// because SetScale() doesn't do it, if zoom=cScaleFactor |
3b8290381fcb
make sure view limits are updated at start of game
sheepluva
parents:
10640
diff
changeset
|
96 |
updateViewLimits(); |
10302
ea0b0e2efd95
huh? me? nono, don't mind me. I'm just here to clean up.
sheepluva
parents:
10276
diff
changeset
|
97 |
end; |
7188
580cd247511e
Removed leftover FFP code: We should now be GL2 GLSL1.30+ forward compatible.
Wolfgang Steffens <WolfgangSteff@gmail.com>
parents:
7186
diff
changeset
|
98 |
|
10102 | 99 |
function WriteInRect(Surface: PSDL_Surface; X, Y: LongInt; Color: LongWord; Font: THWFont; s: PChar): TSDL_Rect; |
2747 | 100 |
var w, h: LongInt; |
101 |
tmpsurf: PSDL_Surface; |
|
102 |
clr: TSDL_Color; |
|
103 |
finalRect: TSDL_Rect; |
|
104 |
begin |
|
3407 | 105 |
w:= 0; h:= 0; // avoid compiler hints |
10102 | 106 |
TTF_SizeUTF8(Fontz[Font].Handle, s, @w, @h); |
6982 | 107 |
finalRect.x:= X + cFontBorder + 2; |
108 |
finalRect.y:= Y + cFontBorder; |
|
109 |
finalRect.w:= w + cFontBorder * 2 + 4; |
|
110 |
finalRect.h:= h + cFontBorder * 2; |
|
2747 | 111 |
clr.r:= Color shr 16; |
112 |
clr.g:= (Color shr 8) and $FF; |
|
113 |
clr.b:= Color and $FF; |
|
10102 | 114 |
tmpsurf:= TTF_RenderUTF8_Blended(Fontz[Font].Handle, s, clr); |
11507 | 115 |
if tmpsurf = nil then exit; |
2747 | 116 |
tmpsurf:= doSurfaceConversion(tmpsurf); |
11507 | 117 |
|
118 |
if tmpsurf <> nil then |
|
119 |
begin |
|
120 |
SDL_UpperBlit(tmpsurf, nil, Surface, @finalRect); |
|
121 |
SDL_FreeSurface(tmpsurf); |
|
122 |
finalRect.x:= X; |
|
123 |
finalRect.y:= Y; |
|
124 |
finalRect.w:= w + cFontBorder * 2 + 4; |
|
125 |
finalRect.h:= h + cFontBorder * 2; |
|
126 |
end; |
|
127 |
||
2747 | 128 |
WriteInRect:= finalRect |
129 |
end; |
|
130 |
||
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
|
131 |
procedure MakeCrossHairs; |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
132 |
var tmpsurf: PSDL_Surface; |
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
|
133 |
begin |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
134 |
tmpsurf:= LoadDataImage(ptGraphics, cCHFileName, ifAlpha or ifCritical); |
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
|
135 |
|
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
136 |
CrosshairTexture:= Surface2Tex(tmpsurf, false); |
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
|
137 |
|
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
138 |
SDL_FreeSurface(tmpsurf) |
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
|
139 |
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
|
140 |
|
9656 | 141 |
function makeHealthBarTexture(w, h, Color: Longword): PTexture; |
142 |
var |
|
143 |
rr: TSDL_Rect; |
|
144 |
texsurf: PSDL_Surface; |
|
145 |
begin |
|
146 |
rr.x:= 0; |
|
147 |
rr.y:= 0; |
|
148 |
rr.w:= w; |
|
149 |
rr.h:= h; |
|
150 |
||
151 |
texsurf:= SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 32, RMask, GMask, BMask, AMask); |
|
11532 | 152 |
if not checkFails(texsurf <> nil, errmsgCreateSurface, true) then |
153 |
checkFails(SDL_SetColorKey(texsurf, SDL_SRCCOLORKEY, 0) = 0, errmsgTransparentSet, true); |
|
154 |
||
155 |
if not allOK then exit(nil); |
|
9656 | 156 |
|
157 |
DrawRoundRect(@rr, cWhiteColor, cNearBlackColor, texsurf, true); |
|
158 |
||
159 |
rr.x:= 2; |
|
160 |
rr.y:= 2; |
|
161 |
rr.w:= w - 4; |
|
162 |
rr.h:= h - 4; |
|
163 |
||
164 |
DrawRoundRect(@rr, Color, Color, texsurf, false); |
|
165 |
makeHealthBarTexture:= Surface2Tex(texsurf, false); |
|
166 |
SDL_FreeSurface(texsurf); |
|
167 |
end; |
|
4 | 168 |
|
6492 | 169 |
procedure WriteNames(Font: THWFont); |
170 |
var t: LongInt; |
|
7495 | 171 |
i, maxLevel: LongInt; |
9656 | 172 |
r: TSDL_Rect; |
6492 | 173 |
drY: LongInt; |
174 |
texsurf, flagsurf, iconsurf: PSDL_Surface; |
|
7495 | 175 |
foundBot: boolean; |
9773 | 176 |
year, month, md : word; |
6492 | 177 |
begin |
10139 | 178 |
if cOnlyStats then exit; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
179 |
r.x:= 0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
180 |
r.y:= 0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
181 |
drY:= - 4; |
9954 | 182 |
{$IFNDEF PAS2C} |
9773 | 183 |
DecodeDate(Date, year, month, md); |
9954 | 184 |
{$ELSE} |
185 |
year:= 0; |
|
186 |
month:= 0; |
|
187 |
md:= 0; |
|
188 |
{$ENDIF} |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
189 |
for t:= 0 to Pred(TeamsCount) do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
190 |
with TeamsArray[t]^ do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
191 |
begin |
10127 | 192 |
NameTagTex:= RenderStringTexLim(ansistring(TeamName), Clan^.Color, Font, cTeamHealthWidth); |
9791
446e4919b738
Display team owner in teams widget (addresses issue 174)
unc0rr
parents:
9774
diff
changeset
|
193 |
if length(Owner) > 0 then |
10127 | 194 |
OwnerTex:= RenderStringTexLim(ansistring(Owner), Clan^.Color, Font, cTeamHealthWidth); |
690 | 195 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
196 |
r.x:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
197 |
r.y:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
198 |
r.w:= 32; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
199 |
r.h:= 32; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
200 |
texsurf:= SDL_CreateRGBSurface(SDL_SWSURFACE, r.w, r.h, 32, RMask, GMask, BMask, AMask); |
11532 | 201 |
if not checkFails(texsurf <> nil, errmsgCreateSurface, true) then |
202 |
checkFails(SDL_SetColorKey(texsurf, SDL_SRCCOLORKEY, 0) = 0, errmsgTransparentSet, true); |
|
203 |
if not allOK then exit; |
|
2747 | 204 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
205 |
r.w:= 26; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
206 |
r.h:= 19; |
2747 | 207 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
208 |
DrawRoundRect(@r, cWhiteColor, cNearBlackColor, texsurf, true); |
3697 | 209 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
210 |
// overwrite flag for cpu teams and keep players from using it |
7495 | 211 |
foundBot:= false; |
212 |
maxLevel:= -1; |
|
213 |
for i:= 0 to cMaxHHIndex do |
|
214 |
with Hedgehogs[i] do |
|
215 |
if (Gear <> nil) and (BotLevel > 0) then |
|
216 |
begin |
|
217 |
foundBot:= true; |
|
218 |
// initially was going to do the highest botlevel of the team, but for now, just apply if entire team has same bot level |
|
219 |
if maxLevel = -1 then maxLevel:= BotLevel |
|
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
220 |
else if (maxLevel > 0) and (maxLevel <> BotLevel) then maxLevel:= 0; |
7495 | 221 |
//if (maxLevel > 0) and (BotLevel < maxLevel) then maxLevel:= BotLevel |
222 |
end |
|
223 |
else if Gear <> nil then maxLevel:= 0; |
|
224 |
||
225 |
if foundBot then |
|
226 |
begin |
|
227 |
// disabled the plain flag - I think it looks ok even w/ full bars obscuring CPU |
|
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
228 |
//if (maxLevel > 0) and (maxLevel < 3) then Flag:= 'cpu_plain' else |
7495 | 229 |
Flag:= 'cpu' |
230 |
end |
|
231 |
else if (Flag = 'cpu') or (Flag = 'cpu_plain') then |
|
232 |
Flag:= 'hedgewars'; |
|
3697 | 233 |
|
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
234 |
flagsurf:= LoadDataImageAltFile(ptFlags, Flag, 'hedgewars', ifNone); |
11532 | 235 |
if not checkFails(flagsurf <> nil, 'Failed to load flag "' + Flag + '" as well as the default flag', true) then |
236 |
begin |
|
237 |
case maxLevel of |
|
238 |
1: copyToXY(SpritesData[sprBotlevels].Surface, flagsurf, 0, 0); |
|
239 |
2: copyToXYFromRect(SpritesData[sprBotlevels].Surface, flagsurf, 5, 2, 17, 13, 5, 2); |
|
240 |
3: copyToXYFromRect(SpritesData[sprBotlevels].Surface, flagsurf, 9, 5, 13, 10, 9, 5); |
|
241 |
4: copyToXYFromRect(SpritesData[sprBotlevels].Surface, flagsurf, 13, 9, 9, 6, 13, 9); |
|
242 |
5: copyToXYFromRect(SpritesData[sprBotlevels].Surface, flagsurf, 17, 11, 5, 4, 17, 11) |
|
243 |
end; |
|
7495 | 244 |
|
11532 | 245 |
copyToXY(flagsurf, texsurf, 2, 2); |
246 |
SDL_FreeSurface(flagsurf); |
|
247 |
flagsurf:= nil; |
|
248 |
end; |
|
7495 | 249 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
250 |
// restore black border pixels inside the flag |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
251 |
PLongwordArray(texsurf^.pixels)^[32 * 2 + 2]:= cNearBlackColor; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
252 |
PLongwordArray(texsurf^.pixels)^[32 * 2 + 23]:= cNearBlackColor; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
253 |
PLongwordArray(texsurf^.pixels)^[32 * 16 + 2]:= cNearBlackColor; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
254 |
PLongwordArray(texsurf^.pixels)^[32 * 16 + 23]:= cNearBlackColor; |
2747 | 255 |
|
7495 | 256 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
257 |
FlagTex:= Surface2Tex(texsurf, false); |
3041 | 258 |
SDL_FreeSurface(texsurf); |
4874 | 259 |
texsurf:= nil; |
3041 | 260 |
|
11532 | 261 |
if not allOK then exit; |
262 |
||
10127 | 263 |
AIKillsTex := RenderStringTex(ansistring(inttostr(stats.AIKills)), Clan^.Color, fnt16); |
3773 | 264 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
265 |
dec(drY, r.h + 2); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
266 |
DrawHealthY:= drY; |
7495 | 267 |
for i:= 0 to cMaxHHIndex do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
268 |
with Hedgehogs[i] do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
269 |
if Gear <> nil then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
270 |
begin |
10127 | 271 |
NameTagTex:= RenderStringTexLim(ansistring(Name), Clan^.Color, fnt16, cTeamHealthWidth); |
9773 | 272 |
if Hat = 'NoHat' then |
273 |
begin |
|
9807 | 274 |
if (month = 4) and (md = 20) then |
275 |
Hat := 'eastertop' // Easter |
|
9938 | 276 |
else if (month = 12) and ((md = 24) or (md = 25) or (md = 26)) then |
277 |
Hat := 'Santa' // Christmas Eve/Christmas/Boxing Day |
|
9807 | 278 |
else if (month = 10) and (md = 31) then |
9773 | 279 |
Hat := 'fr_pumpkin'; // Halloween/Hedgewars' birthday |
280 |
end; |
|
10526
b43d175d1577
Avoid promoting violence to hedgehogs. At least once a year.
nemo
parents:
10510
diff
changeset
|
281 |
if (month = 4) and (md = 1) then |
b43d175d1577
Avoid promoting violence to hedgehogs. At least once a year.
nemo
parents:
10510
diff
changeset
|
282 |
begin |
b43d175d1577
Avoid promoting violence to hedgehogs. At least once a year.
nemo
parents:
10510
diff
changeset
|
283 |
AprilOne:= true; |
b43d175d1577
Avoid promoting violence to hedgehogs. At least once a year.
nemo
parents:
10510
diff
changeset
|
284 |
Hat := 'fr_tomato'; // avoid promoting violence to hedgehogs. see http://hedgewars.org/node/5818 |
b43d175d1577
Avoid promoting violence to hedgehogs. At least once a year.
nemo
parents:
10510
diff
changeset
|
285 |
end; |
10015 | 286 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
287 |
if Hat <> 'NoHat' then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
288 |
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
|
289 |
if (Length(Hat) > 39) and (Copy(Hat,1,8) = 'Reserved') and (Copy(Hat,9,32) = PlayerHash) then |
10262 | 290 |
LoadHedgehogHat2(Hedgehogs[i], 'Reserved/' + Copy(Hat,9,Length(Hat)-8), true) |
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
|
291 |
else |
10262 | 292 |
LoadHedgehogHat2(Hedgehogs[i], Hat, true); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
293 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
294 |
end; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
295 |
end; |
10262 | 296 |
|
297 |
freeTmpHatSurf(); |
|
298 |
||
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
299 |
MissionIcons:= LoadDataImage(ptGraphics, 'missions', ifCritical); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
300 |
iconsurf:= SDL_CreateRGBSurface(SDL_SWSURFACE, 28, 28, 32, RMask, GMask, BMask, AMask); |
3862 | 301 |
if iconsurf <> nil then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
302 |
begin |
3862 | 303 |
r.x:= 0; |
304 |
r.y:= 0; |
|
305 |
r.w:= 28; |
|
306 |
r.h:= 28; |
|
307 |
DrawRoundRect(@r, cWhiteColor, cNearBlackColor, iconsurf, true); |
|
308 |
ropeIconTex:= Surface2Tex(iconsurf, false); |
|
309 |
SDL_FreeSurface(iconsurf); |
|
310 |
iconsurf:= nil; |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
311 |
end; |
9656 | 312 |
|
313 |
||
314 |
for t:= 0 to Pred(ClansCount) do |
|
315 |
with ClansArray[t]^ do |
|
316 |
HealthTex:= makeHealthBarTexture(cTeamHealthWidth + 5, Teams[0]^.NameTagTex^.h, Color); |
|
317 |
||
318 |
GenericHealthTexture:= makeHealthBarTexture(cTeamHealthWidth + 5, TeamsArray[0]^.NameTagTex^.h, cWhiteColor) |
|
6492 | 319 |
end; |
4 | 320 |
|
9656 | 321 |
|
6492 | 322 |
procedure InitHealth; |
323 |
var i, t: LongInt; |
|
324 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
325 |
for t:= 0 to Pred(TeamsCount) do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
326 |
if TeamsArray[t] <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
327 |
with TeamsArray[t]^ do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
328 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
329 |
for i:= 0 to cMaxHHIndex do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
330 |
if Hedgehogs[i].Gear <> nil then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
331 |
RenderHealth(Hedgehogs[i]); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
332 |
end |
6492 | 333 |
end; |
4 | 334 |
|
6492 | 335 |
procedure LoadGraves; |
336 |
var t: LongInt; |
|
337 |
texsurf: PSDL_Surface; |
|
338 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
339 |
for t:= 0 to Pred(TeamsCount) do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
340 |
if TeamsArray[t] <> nil then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
341 |
with TeamsArray[t]^ do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
342 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
343 |
if GraveName = '' then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
344 |
GraveName:= 'Statue'; |
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
345 |
texsurf:= LoadDataImageAltFile(ptGraves, GraveName, 'Statue', ifCritical or ifTransparent); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
346 |
GraveTex:= Surface2Tex(texsurf, false); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
347 |
SDL_FreeSurface(texsurf) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
348 |
end |
6492 | 349 |
end; |
4 | 350 |
|
6492 | 351 |
procedure StoreLoad(reload: boolean); |
352 |
var s: shortstring; |
|
353 |
ii: TSprite; |
|
844 | 354 |
fi: THWFont; |
355 |
ai: TAmmoType; |
|
356 |
tmpsurf: PSDL_Surface; |
|
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
357 |
i, imflags: LongInt; |
4 | 358 |
begin |
5712 | 359 |
AddFileLog('StoreLoad()'); |
5714 | 360 |
|
10139 | 361 |
if (not reload) and (not cOnlyStats) then |
5714 | 362 |
for fi:= Low(THWFont) to High(THWFont) do |
363 |
with Fontz[fi] do |
|
364 |
begin |
|
8025 | 365 |
s:= cPathz[ptFonts] + '/' + Name; |
5714 | 366 |
WriteToConsole(msgLoading + s + ' (' + inttostr(Height) + 'pt)... '); |
8028 | 367 |
Handle:= TTF_OpenFontRW(rwopsOpenRead(s), true, Height); |
11507 | 368 |
if SDLCheck(Handle <> nil, 'TTF_OpenFontRW', true) then exit; |
5714 | 369 |
TTF_SetFontStyle(Handle, style); |
370 |
WriteLnToConsole(msgOK) |
|
371 |
end; |
|
53 | 372 |
|
10510 | 373 |
if not cOnlyStats then |
10139 | 374 |
begin |
375 |
MakeCrossHairs; |
|
376 |
LoadGraves; |
|
11100
c348a8afff6e
- Resolves problem with wrong path to chef hat on iOS
antonc27 <antonc27@mail.ru>
parents:
11086
diff
changeset
|
377 |
{$IFDEF IPHONEOS} |
c348a8afff6e
- Resolves problem with wrong path to chef hat on iOS
antonc27 <antonc27@mail.ru>
parents:
11086
diff
changeset
|
378 |
tmpHatSurf:= LoadDataImage(ptHats, 'chef', ifNone); |
c348a8afff6e
- Resolves problem with wrong path to chef hat on iOS
antonc27 <antonc27@mail.ru>
parents:
11086
diff
changeset
|
379 |
{$ELSE} |
10443
42dadeb6e8ae
Remove switching of hog's hat to chef. do it in draw instead.
nemo
parents:
10309
diff
changeset
|
380 |
tmpHatSurf:= LoadDataImage(ptHats, 'Reserved/chef', ifNone); |
11100
c348a8afff6e
- Resolves problem with wrong path to chef hat on iOS
antonc27 <antonc27@mail.ru>
parents:
11086
diff
changeset
|
381 |
{$ENDIF} |
10443
42dadeb6e8ae
Remove switching of hog's hat to chef. do it in draw instead.
nemo
parents:
10309
diff
changeset
|
382 |
ChefHatTexture:= Surface2Tex(tmpHatSurf, true); |
42dadeb6e8ae
Remove switching of hog's hat to chef. do it in draw instead.
nemo
parents:
10309
diff
changeset
|
383 |
freeTmpHatSurf(); |
10139 | 384 |
end; |
10510 | 385 |
|
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
|
386 |
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
|
387 |
AddProgress; |
4 | 388 |
|
389 |
for ii:= Low(TSprite) to High(TSprite) do |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
390 |
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
|
391 |
// 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
|
392 |
if (((cReducedQuality and (rqNoBackground or rqLowRes)) = 0) or // why rqLowRes? |
10139 | 393 |
(not (ii in [sprSky, sprSkyL, sprSkyR, sprHorizont, sprHorizontL, sprHorizontR]))) |
10510 | 394 |
and (((cReducedQuality and rqPlainSplash) = 0) or ((not (ii in [sprSplash, sprDroplet, sprSDSplash, sprSDDroplet])))) |
10139 | 395 |
and (((cReducedQuality and rqKillFlakes) = 0) or cSnow or ((not (ii in [sprFlake, sprSDFlake])))) |
396 |
and ((cCloudsNumber > 0) or (ii <> sprCloud)) |
|
10510 | 397 |
and ((vobCount > 0) or (ii <> sprFlake)) |
10139 | 398 |
and (savesurf or (not cOnlyStats)) // in stats-only only load those which are needed later |
11539 | 399 |
and allOK |
10139 | 400 |
then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
401 |
begin |
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
402 |
if reload then |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
403 |
tmpsurf:= Surface |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
404 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
405 |
begin |
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
406 |
imflags := (ifAlpha or ifTransparent); |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
407 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
408 |
// these sprites are optional |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
409 |
if not (ii in [sprHorizont, sprHorizontL, sprHorizontR, sprSky, sprSkyL, sprSkyR, sprChunk]) then // FIXME: hack |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
410 |
imflags := (imflags or ifCritical); |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
411 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
412 |
// load the image |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
413 |
tmpsurf := LoadDataImageAltPath(Path, AltPath, FileName, imflags) |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
414 |
end; |
2426 | 415 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
416 |
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
|
417 |
begin |
3558 | 418 |
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
|
419 |
begin |
3558 | 420 |
imageWidth:= tmpsurf^.w; |
421 |
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
|
422 |
end; |
3558 | 423 |
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
|
424 |
begin |
3558 | 425 |
Width:= tmpsurf^.w; |
426 |
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
|
427 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
428 |
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
|
429 |
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
|
430 |
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
|
431 |
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
|
432 |
end |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
433 |
else |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
434 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
435 |
Texture:= Surface2Tex(tmpsurf, false); |
4809
9c7d5f802618
rearrange quality flags a little, disable snow rendering on rqLowRes
koda
parents:
4782
diff
changeset
|
436 |
// 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
|
437 |
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
|
438 |
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
|
439 |
end; |
3491 | 440 |
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
|
441 |
// 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
|
442 |
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
|
443 |
begin |
6674 | 444 |
{$IFDEF USE_CONTEXT_RESTORE} |
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
445 |
Surface:= tmpsurf |
5714 | 446 |
{$ELSE} |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
447 |
if saveSurf then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
448 |
Surface:= tmpsurf |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
449 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
450 |
SDL_FreeSurface(tmpsurf) |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
451 |
{$ENDIF} |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
452 |
end |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
453 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
454 |
else |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
455 |
Surface:= nil |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
456 |
end; |
80 | 457 |
|
11539 | 458 |
if (not cOnlyStats) and allOK then |
10139 | 459 |
begin |
460 |
WriteNames(fnt16); |
|
7495 | 461 |
|
10139 | 462 |
if not reload then |
463 |
AddProgress; |
|
464 |
||
465 |
tmpsurf:= LoadDataImage(ptGraphics, cHHFileName, ifAlpha or ifCritical or ifTransparent); |
|
567 | 466 |
|
10139 | 467 |
HHTexture:= Surface2Tex(tmpsurf, false); |
468 |
SDL_FreeSurface(tmpsurf); |
|
469 |
||
470 |
InitHealth; |
|
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
471 |
|
10139 | 472 |
PauseTexture:= RenderStringTex(trmsg[sidPaused], cYellowColor, fntBig); |
473 |
AFKTexture:= RenderStringTex(trmsg[sidAFK], cYellowColor, fntBig); |
|
474 |
ConfirmTexture:= RenderStringTex(trmsg[sidConfirm], cYellowColor, fntBig); |
|
475 |
SyncTexture:= RenderStringTex(trmsg[sidSync], cYellowColor, fntBig); |
|
4 | 476 |
|
10139 | 477 |
if not reload then |
478 |
AddProgress; |
|
2601 | 479 |
|
10139 | 480 |
// name of weapons in ammo menu |
481 |
for ai:= Low(TAmmoType) to High(TAmmoType) do |
|
482 |
with Ammoz[ai] do |
|
483 |
begin |
|
11532 | 484 |
if checkFails(length(trAmmo[NameId]) > 0,'No default text/translation found for ammo type #' + intToStr(ord(ai)) + '!',true) then exit; |
10139 | 485 |
tmpsurf:= TTF_RenderUTF8_Blended(Fontz[CheckCJKFont(trAmmo[NameId],fnt16)].Handle, PChar(trAmmo[NameId]), cWhiteColorChannels); |
11532 | 486 |
if checkFails(tmpsurf <> nil,'Name-texture creation for ammo type #' + intToStr(ord(ai)) + ' failed!',true) then exit; |
10139 | 487 |
tmpsurf:= doSurfaceConversion(tmpsurf); |
10634
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10626
diff
changeset
|
488 |
FreeAndNilTexture(NameTex); |
10139 | 489 |
NameTex:= Surface2Tex(tmpsurf, false); |
490 |
SDL_FreeSurface(tmpsurf) |
|
491 |
end; |
|
2601 | 492 |
|
10139 | 493 |
// number of weapons in ammo menu |
494 |
for i:= Low(CountTexz) to High(CountTexz) do |
|
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
495 |
begin |
10139 | 496 |
tmpsurf:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(IntToStr(i) + 'x'), cWhiteColorChannels); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
497 |
tmpsurf:= doSurfaceConversion(tmpsurf); |
10634
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10626
diff
changeset
|
498 |
FreeAndNilTexture(CountTexz[i]); |
10139 | 499 |
CountTexz[i]:= Surface2Tex(tmpsurf, false); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
500 |
SDL_FreeSurface(tmpsurf) |
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
501 |
end; |
2376 | 502 |
|
10139 | 503 |
if not reload then |
504 |
AddProgress; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
505 |
end; |
844 | 506 |
|
2669 | 507 |
IMG_Quit(); |
4 | 508 |
end; |
509 |
||
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
510 |
procedure StoreRelease(reload: boolean); |
4 | 511 |
var ii: TSprite; |
4901 | 512 |
ai: TAmmoType; |
513 |
i, t: LongInt; |
|
4 | 514 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
515 |
for ii:= Low(TSprite) to High(TSprite) do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
516 |
begin |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
517 |
FreeAndNilTexture(SpritesData[ii].Texture); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
518 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
519 |
if (SpritesData[ii].Surface <> nil) and (not reload) then |
5562 | 520 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
521 |
SDL_FreeSurface(SpritesData[ii].Surface); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
522 |
SpritesData[ii].Surface:= nil |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
523 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
524 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
525 |
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
|
526 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
527 |
// free the textures declared in uVariables |
10443
42dadeb6e8ae
Remove switching of hog's hat to chef. do it in draw instead.
nemo
parents:
10309
diff
changeset
|
528 |
FreeAndNilTexture(ChefHatTexture); |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
529 |
FreeAndNilTexture(CrosshairTexture); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
530 |
FreeAndNilTexture(WeaponTooltipTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
531 |
FreeAndNilTexture(PauseTexture); |
9670
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9656
diff
changeset
|
532 |
FreeAndNilTexture(AFKTexture); |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
533 |
FreeAndNilTexture(SyncTexture); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
534 |
FreeAndNilTexture(ConfirmTexture); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
535 |
FreeAndNilTexture(ropeIconTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
536 |
FreeAndNilTexture(HHTexture); |
9656 | 537 |
FreeAndNilTexture(GenericHealthTexture); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
538 |
// free all ammo name textures |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
539 |
for ai:= Low(TAmmoType) to High(TAmmoType) do |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
540 |
FreeAndNilTexture(Ammoz[ai].NameTex); |
5562 | 541 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
542 |
// free all count textures |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
543 |
for i:= Low(CountTexz) to High(CountTexz) do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
544 |
begin |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
545 |
FreeAndNilTexture(CountTexz[i]); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
546 |
CountTexz[i]:= nil |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
547 |
end; |
5562 | 548 |
|
9656 | 549 |
for t:= 0 to Pred(ClansCount) do |
550 |
begin |
|
551 |
if ClansArray[t] <> nil then |
|
552 |
FreeAndNilTexture(ClansArray[t]^.HealthTex); |
|
553 |
end; |
|
554 |
||
4901 | 555 |
// free all team and hedgehog textures |
556 |
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
|
557 |
begin |
4901 | 558 |
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
|
559 |
begin |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
560 |
FreeAndNilTexture(TeamsArray[t]^.NameTagTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
561 |
FreeAndNilTexture(TeamsArray[t]^.GraveTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
562 |
FreeAndNilTexture(TeamsArray[t]^.AIKillsTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
563 |
FreeAndNilTexture(TeamsArray[t]^.FlagTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
564 |
|
4901 | 565 |
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
|
566 |
begin |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
567 |
FreeAndNilTexture(TeamsArray[t]^.Hedgehogs[i].NameTagTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
568 |
FreeAndNilTexture(TeamsArray[t]^.Hedgehogs[i].HealthTagTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
569 |
FreeAndNilTexture(TeamsArray[t]^.Hedgehogs[i].HatTex); |
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
570 |
end; |
4901 | 571 |
end; |
572 |
end; |
|
10869 | 573 |
|
574 |
RendererCleanup(); |
|
4 | 575 |
end; |
576 |
||
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
|
577 |
|
4 | 578 |
procedure RenderHealth(var Hedgehog: THedgehog); |
95 | 579 |
var s: shortstring; |
4 | 580 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
581 |
str(Hedgehog.Gear^.Health, s); |
10634
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10626
diff
changeset
|
582 |
FreeAndNilTexture(Hedgehog.HealthTagTex); |
10127 | 583 |
Hedgehog.HealthTagTex:= RenderStringTex(ansistring(s), Hedgehog.Team^.Clan^.Color, fnt16) |
4 | 584 |
end; |
585 |
||
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6986
diff
changeset
|
586 |
function LoadImage(const filename: shortstring; imageFlags: LongInt): PSDL_Surface; |
30 | 587 |
var tmpsurf: PSDL_Surface; |
355 | 588 |
s: shortstring; |
10260
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
589 |
rwops: PSDL_RWops; |
4 | 590 |
begin |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6986
diff
changeset
|
591 |
LoadImage:= nil; |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6986
diff
changeset
|
592 |
WriteToConsole(msgLoading + filename + '.png [flags: ' + inttostr(imageFlags) + '] '); |
2426 | 593 |
|
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6986
diff
changeset
|
594 |
s:= filename + '.png'; |
10260
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
595 |
|
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
596 |
rwops:= nil; |
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
597 |
tmpsurf:= nil; |
2254 | 598 |
|
10260
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
599 |
if pfsExists(s) then |
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
600 |
begin |
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
601 |
// get data source |
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
602 |
rwops:= rwopsOpenRead(s); |
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
603 |
|
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
604 |
// load image with SDL (with freesrc param set to true) |
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
605 |
if rwops <> nil then |
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
606 |
tmpsurf:= IMG_Load_RW(rwops, true); |
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
607 |
end; |
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
608 |
|
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
609 |
// loading failed |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
610 |
if tmpsurf = nil then |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8838
diff
changeset
|
611 |
begin |
10260
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
612 |
// output sdl error if loading failed when data source was available |
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
613 |
if rwops <> nil then |
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
614 |
begin |
10735 | 615 |
// anounce that loading failed |
616 |
OutError(msgFailed, false); |
|
617 |
||
11507 | 618 |
if SDLCheck(false, 'LoadImage', (imageFlags and ifCritical) <> 0) then exit; |
10260
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
619 |
// rwops was already freed by IMG_Load_RW |
25155aaede77
clean up image loading a bit. gets rid of useless "Passed NULL data source" or PhysFS file not found errors
sheepluva
parents:
10229
diff
changeset
|
620 |
rwops:= nil; |
10735 | 621 |
end else |
622 |
OutError(msgFailed, (imageFlags and ifCritical) <> 0); |
|
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6986
diff
changeset
|
623 |
exit; |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8838
diff
changeset
|
624 |
end; |
2153 | 625 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
626 |
if ((imageFlags and ifIgnoreCaps) = 0) and ((tmpsurf^.w > MaxTextureSize) or (tmpsurf^.h > MaxTextureSize)) then |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8838
diff
changeset
|
627 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
628 |
SDL_FreeSurface(tmpsurf); |
8039
a3b86c1f63b4
another tweak tomake --stats-only work on headless servers
Xeli
parents:
8027
diff
changeset
|
629 |
OutError(msgFailedSize, ((not cOnlyStats) and ((imageFlags and ifCritical) <> 0))); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
630 |
// dummy surface to replace non-critical textures that failed to load due to their size |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6986
diff
changeset
|
631 |
LoadImage:= SDL_CreateRGBSurface(SDL_SWSURFACE, 2, 2, 32, RMask, GMask, BMask, AMask); |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6986
diff
changeset
|
632 |
exit; |
8848
e9ebd63f8a03
So. Some themes have objects that seem to be large natural extensions of the landscape. Masks allow maintaining that. Lemme know if it doesn't look good. If it doesn't, can still use for ice/bounce/indestructible. Indestructible bunker object for example.
nemo
parents:
8838
diff
changeset
|
633 |
end; |
351 | 634 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
635 |
tmpsurf:= doSurfaceConversion(tmpsurf); |
2630 | 636 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
637 |
if (imageFlags and ifTransparent) <> 0 then |
11532 | 638 |
if checkFails(SDL_SetColorKey(tmpsurf, SDL_SRCCOLORKEY, 0) = 0, errmsgTransparentSet, true) then exit; |
2630 | 639 |
|
3407 | 640 |
WriteLnToConsole(msgOK + ' (' + inttostr(tmpsurf^.w) + 'x' + inttostr(tmpsurf^.h) + ')'); |
2630 | 641 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
642 |
LoadImage:= tmpsurf //Result |
753 | 643 |
end; |
644 |
||
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
645 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
646 |
function LoadDataImage(const path: TPathType; const filename: shortstring; imageFlags: LongInt): PSDL_Surface; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
647 |
var tmpsurf: PSDL_Surface; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
648 |
begin |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
649 |
// check for file in user dir (never critical) |
8022 | 650 |
tmpsurf:= LoadImage(cPathz[path] + '/' + filename, imageFlags); |
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
651 |
|
8370 | 652 |
LoadDataImage:= tmpsurf; |
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
653 |
end; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
654 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
655 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
656 |
function LoadDataImageAltPath(const path, altPath: TPathType; const filename: shortstring; imageFlags: LongInt): PSDL_Surface; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
657 |
var tmpsurf: PSDL_Surface; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
658 |
begin |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
659 |
// if there is no alternative path, just forward and return result |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
660 |
if (altPath = ptNone) then |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
661 |
exit(LoadDataImage(path, filename, imageFlags)); |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
662 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
663 |
// since we have a fallback path this search isn't critical yet |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
664 |
tmpsurf:= LoadDataImage(path, filename, imageFlags and (not ifCritical)); |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
665 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
666 |
// if image still not found try alternative path |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
667 |
if (tmpsurf = nil) then |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
668 |
tmpsurf:= LoadDataImage(altPath, filename, imageFlags); |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
669 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
670 |
LoadDataImageAltPath:= tmpsurf; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
671 |
end; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
672 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
673 |
function LoadDataImageAltFile(const path: TPathType; const filename, altFile: shortstring; imageFlags: LongInt): PSDL_Surface; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
674 |
var tmpsurf: PSDL_Surface; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
675 |
begin |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
676 |
// if there is no alternative filename, just forward and return result |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
677 |
if (altFile = '') then |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
678 |
exit(LoadDataImage(path, filename, imageFlags)); |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
679 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
680 |
// since we have a fallback filename this search isn't critical yet |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
681 |
tmpsurf:= LoadDataImage(path, filename, imageFlags and (not ifCritical)); |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
682 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
683 |
// if image still not found try alternative filename |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
684 |
if (tmpsurf = nil) then |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
685 |
tmpsurf:= LoadDataImage(path, altFile, imageFlags); |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
686 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
687 |
LoadDataImageAltFile:= tmpsurf; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
688 |
end; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
689 |
|
7754 | 690 |
procedure LoadHedgehogHat(var HH: THedgehog; newHat: shortstring); |
10262 | 691 |
begin |
692 |
LoadHedgehogHat2(HH, newHat, false); |
|
693 |
end; |
|
694 |
||
695 |
procedure LoadHedgehogHat2(var HH: THedgehog; newHat: shortstring; allowSurfReuse: boolean); |
|
4874 | 696 |
begin |
9774 | 697 |
// free the mem of any previously assigned texture. This was previously only if the new one could be loaded, but, NoHat is usually a better choice |
698 |
if HH.HatTex <> nil then |
|
10634
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10626
diff
changeset
|
699 |
FreeAndNilTexture(HH.HatTex); |
10262 | 700 |
|
701 |
// load new hat surface if this hat is different than the one already loaded |
|
702 |
if newHat <> prevHat then |
|
9774 | 703 |
begin |
10262 | 704 |
freeTmpHatSurf(); |
705 |
tmpHatSurf:= LoadDataImage(ptHats, newHat, ifNone); |
|
9774 | 706 |
end; |
10262 | 707 |
|
7754 | 708 |
AddFileLog('Hat => '+newHat); |
4874 | 709 |
// only do something if the hat could be loaded |
10262 | 710 |
if tmpHatSurf <> nil then |
4874 | 711 |
begin |
7754 | 712 |
AddFileLog('Got Hat'); |
4874 | 713 |
|
714 |
// assign new hat to hedgehog |
|
10262 | 715 |
HH.HatTex:= Surface2Tex(tmpHatSurf, true); |
4874 | 716 |
|
10262 | 717 |
// remember that this hat was used last |
718 |
if allowSurfReuse then |
|
719 |
prevHat:= newHat |
|
4874 | 720 |
// cleanup: free temporary surface mem |
10262 | 721 |
else |
722 |
freeTmpHatSurf(); |
|
4874 | 723 |
end; |
2428 | 724 |
end; |
725 |
||
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
|
726 |
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
|
727 |
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
|
728 |
{$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
|
729 |
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
|
730 |
SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 1); |
11106
2953f858a196
- Actually fix for rendering on iOS ]:->
antonc27 <antonc27@mail.ru>
parents:
11100
diff
changeset
|
731 |
|
2953f858a196
- Actually fix for rendering on iOS ]:->
antonc27 <antonc27@mail.ru>
parents:
11100
diff
changeset
|
732 |
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); |
2953f858a196
- Actually fix for rendering on iOS ]:->
antonc27 <antonc27@mail.ru>
parents:
11100
diff
changeset
|
733 |
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); |
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
|
734 |
{$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
|
735 |
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); |
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
736 |
{$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
|
737 |
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
|
738 |
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
|
739 |
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); |
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
740 |
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0); // no depth buffer |
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
741 |
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 0); // no alpha channel |
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
742 |
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 16); // buffer should be 16 |
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
743 |
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); // prefer hw rendering |
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
|
744 |
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
|
745 |
|
753 | 746 |
procedure SetupOpenGL; |
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
|
747 |
begin |
9530 | 748 |
AddFileLog('Setting up OpenGL (using driver: ' + shortstring(SDL_GetCurrentVideoDriver()) + ')'); |
6021 | 749 |
|
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
750 |
// TODO: this function creates an opengles1.1 context |
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
751 |
// un-comment below and add proper logic to support opengles2.0 |
6885 | 752 |
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); |
753 |
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); |
|
6611 | 754 |
if SDLGLcontext = nil then |
755 |
SDLGLcontext:= SDL_GL_CreateContext(SDLwindow); |
|
11507 | 756 |
if SDLCheck(SDLGLcontext <> nil, 'SDLGLcontext', true) then exit; |
11408
55fc715435ea
- Workaround for problems with SDL_GL_SetSwapInterval on iOS
antonc27 <antonc27@mail.ru>
parents:
11373
diff
changeset
|
757 |
SDL_GL_SetSwapInterval(1); |
3405 | 758 |
|
10869 | 759 |
RendererSetup(); |
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
|
760 |
|
11362 | 761 |
// gl2 init/matrix code was here, but removed |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2154
diff
changeset
|
762 |
end; |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2154
diff
changeset
|
763 |
|
510 | 764 |
//////////////////////////////////////////////////////////////////////////////// |
765 |
procedure AddProgress; |
|
766 |
var r: TSDL_Rect; |
|
766 | 767 |
texsurf: PSDL_Surface; |
510 | 768 |
begin |
8027
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
769 |
if cOnlyStats then exit; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
770 |
if Step = 0 then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
771 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
772 |
WriteToConsole(msgLoading + 'progress sprite: '); |
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
773 |
texsurf:= LoadDataImage(ptGraphics, 'Progress', ifCritical or ifTransparent); |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2705
diff
changeset
|
774 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
775 |
ProgrTex:= Surface2Tex(texsurf, false); |
3697 | 776 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
777 |
squaresize:= texsurf^.w shr 1; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
778 |
numsquares:= texsurf^.h div squaresize; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
779 |
SDL_FreeSurface(texsurf); |
8446
c18ba8726f5a
Fix sources so pas2c written in haskell could render them again
unc0rr
parents:
8444
diff
changeset
|
780 |
{$IFNDEF PAS2C} |
8204 | 781 |
with mobileRecord do |
782 |
if GameLoading <> nil then |
|
783 |
GameLoading(); |
|
8446
c18ba8726f5a
Fix sources so pas2c written in haskell could render them again
unc0rr
parents:
8444
diff
changeset
|
784 |
{$ENDIF} |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
785 |
end; |
1045 | 786 |
|
11532 | 787 |
if checkFails(ProgrTex <> nil, 'Error - Progress Texure is nil!', true) then exit; |
2284 | 788 |
|
10304
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10302
diff
changeset
|
789 |
RenderClear(); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
790 |
if Step < numsquares then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
791 |
r.x:= 0 |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
792 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
793 |
r.x:= squaresize; |
3697 | 794 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
795 |
r.y:= (Step mod numsquares) * squaresize; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
796 |
r.w:= squaresize; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
797 |
r.h:= squaresize; |
3697 | 798 |
|
6999 | 799 |
DrawTextureFromRect( -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
|
800 |
|
7049 | 801 |
SwapBuffers; |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
802 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
803 |
inc(Step); |
510 | 804 |
end; |
805 |
||
806 |
procedure FinishProgress; |
|
807 |
begin |
|
8446
c18ba8726f5a
Fix sources so pas2c written in haskell could render them again
unc0rr
parents:
8444
diff
changeset
|
808 |
{$IFNDEF PAS2C} |
8204 | 809 |
with mobileRecord do |
810 |
if GameLoaded <> nil then |
|
811 |
GameLoaded(); |
|
8446
c18ba8726f5a
Fix sources so pas2c written in haskell could render them again
unc0rr
parents:
8444
diff
changeset
|
812 |
{$ENDIF} |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
813 |
WriteLnToConsole('Freeing progress surface... '); |
10634
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10626
diff
changeset
|
814 |
FreeAndNilTexture(ProgrTex); |
5714 | 815 |
Step:= 0 |
510 | 816 |
end; |
817 |
||
2905 | 818 |
function RenderHelpWindow(caption, subcaption, description, extra: ansistring; extracolor: LongInt; iconsurf: PSDL_Surface; iconrect: PSDL_Rect): PTexture; |
2747 | 819 |
var tmpsurf: PSDL_SURFACE; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
820 |
w, h, i, j: LongInt; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
821 |
font: THWFont; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
822 |
r, r2: TSDL_Rect; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
823 |
wa, ha: LongInt; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
824 |
tmpline, tmpline2, tmpdesc: ansistring; |
2747 | 825 |
begin |
2843 | 826 |
// make sure there is a caption as well as a sub caption - description is optional |
10123 | 827 |
if length(caption) = 0 then |
828 |
caption:= ansistring('???'); |
|
10229 | 829 |
if length(subcaption) = 0 then |
10123 | 830 |
subcaption:= ansistring(_S' '); |
2843 | 831 |
|
2841 | 832 |
font:= CheckCJKFont(caption,fnt16); |
833 |
font:= CheckCJKFont(subcaption,font); |
|
834 |
font:= CheckCJKFont(description,font); |
|
835 |
font:= CheckCJKFont(extra,font); |
|
2747 | 836 |
|
837 |
w:= 0; |
|
838 |
h:= 0; |
|
6982 | 839 |
wa:= cFontBorder * 2 + 4; |
840 |
ha:= cFontBorder * 2; |
|
2747 | 841 |
|
3407 | 842 |
i:= 0; j:= 0; // avoid compiler hints |
843 |
||
2747 | 844 |
// TODO: Recheck height/position calculation |
845 |
||
846 |
// get caption's dimensions |
|
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
847 |
TTF_SizeUTF8(Fontz[font].Handle, PChar(caption), @i, @j); |
2747 | 848 |
// width adds 36 px (image + space) |
849 |
w:= i + 36 + wa; |
|
850 |
h:= j + ha; |
|
851 |
||
852 |
// get sub caption's dimensions |
|
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
853 |
TTF_SizeUTF8(Fontz[font].Handle, PChar(subcaption), @i, @j); |
2747 | 854 |
// width adds 36 px (image + space) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
855 |
if w < (i + 36 + wa) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
856 |
w:= i + 36 + wa; |
2747 | 857 |
inc(h, j + ha); |
858 |
||
859 |
// get description's dimensions |
|
860 |
tmpdesc:= description; |
|
10120 | 861 |
while length(tmpdesc) > 0 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; |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10130
diff
changeset
|
864 |
SplitByCharA(tmpline, tmpdesc, '|'); |
10120 | 865 |
if length(tmpline) > 0 then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
866 |
begin |
10120 | 867 |
TTF_SizeUTF8(Fontz[font].Handle, PChar(tmpline), @i, @j); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
868 |
if w < (i + wa) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
869 |
w:= i + wa; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
870 |
inc(h, j + ha) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
871 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
872 |
end; |
2747 | 873 |
|
10123 | 874 |
if length(extra) > 0 then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
875 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
876 |
// get extra label's dimensions |
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
877 |
TTF_SizeUTF8(Fontz[font].Handle, PChar(extra), @i, @j); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
878 |
if w < (i + wa) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
879 |
w:= i + wa; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
880 |
inc(h, j + ha); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
881 |
end; |
3697 | 882 |
|
2747 | 883 |
// add borders space |
884 |
inc(w, wa); |
|
885 |
inc(h, ha + 8); |
|
886 |
||
887 |
tmpsurf:= SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 32, RMask, GMask, BMask, AMask); |
|
11532 | 888 |
if checkFails(tmpsurf <> nil, 'RenderHelpWindow: fail to create surface', true) then exit(nil); |
2747 | 889 |
|
890 |
// render border and background |
|
891 |
r.x:= 0; |
|
892 |
r.y:= 0; |
|
893 |
r.w:= w; |
|
894 |
r.h:= h; |
|
895 |
DrawRoundRect(@r, cWhiteColor, cNearBlackColor, tmpsurf, true); |
|
896 |
||
897 |
// render caption |
|
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
898 |
r:= WriteInRect(tmpsurf, 36 + cFontBorder + 2, ha, $ffffffff, font, PChar(caption)); |
2747 | 899 |
// render sub caption |
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
900 |
r:= WriteInRect(tmpsurf, 36 + cFontBorder + 2, r.y + r.h, $ffc7c7c7, font, PChar(subcaption)); |
2747 | 901 |
|
902 |
// render all description lines |
|
903 |
tmpdesc:= description; |
|
10120 | 904 |
while length(tmpdesc) > 0 do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
905 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
906 |
tmpline:= tmpdesc; |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10130
diff
changeset
|
907 |
SplitByCharA(tmpline, tmpdesc, '|'); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
908 |
r2:= r; |
10120 | 909 |
if length(tmpline) > 0 then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
910 |
begin |
10120 | 911 |
r:= WriteInRect(tmpsurf, cFontBorder + 2, r.y + r.h, $ff707070, font, PChar(tmpline)); |
3697 | 912 |
|
5518 | 913 |
// render highlighted caption (if there is a ':') |
7134 | 914 |
tmpline2:= _S''; |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10130
diff
changeset
|
915 |
SplitByCharA(tmpline, tmpline2, ':'); |
10120 | 916 |
if length(tmpline2) > 0 then |
10128 | 917 |
begin |
918 |
tmpline:= tmpline + ':'; |
|
919 |
WriteInRect(tmpsurf, cFontBorder + 2, r2.y + r2.h, $ffc7c7c7, font, PChar(tmpline)); |
|
920 |
end; |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
921 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
922 |
end; |
2747 | 923 |
|
10123 | 924 |
if length(extra) > 0 then |
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
925 |
r:= WriteInRect(tmpsurf, cFontBorder + 2, r.y + r.h, extracolor, font, PChar(extra)); |
2747 | 926 |
|
6982 | 927 |
r.x:= cFontBorder + 6; |
928 |
r.y:= cFontBorder + 4; |
|
2747 | 929 |
r.w:= 32; |
930 |
r.h:= 32; |
|
931 |
SDL_FillRect(tmpsurf, @r, $ffffffff); |
|
932 |
SDL_UpperBlit(iconsurf, iconrect, tmpsurf, @r); |
|
3697 | 933 |
|
2747 | 934 |
RenderHelpWindow:= Surface2Tex(tmpsurf, true); |
935 |
SDL_FreeSurface(tmpsurf) |
|
936 |
end; |
|
937 |
||
938 |
procedure RenderWeaponTooltip(atype: TAmmoType); |
|
939 |
var r: TSDL_Rect; |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
940 |
i: LongInt; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
941 |
extra: ansistring; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
942 |
extracolor: LongInt; |
2747 | 943 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
944 |
// don't do anything if the window shouldn't be shown |
3634 | 945 |
if (cReducedQuality and rqTooltipsOff) <> 0 then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
946 |
begin |
3634 | 947 |
WeaponTooltipTex:= nil; |
948 |
exit |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
949 |
end; |
2747 | 950 |
|
951 |
// free old texture |
|
10634
35d059bd0932
Use FreeAndNil across the board. Even if we are immediately assigning after, probably avoids accidental mistakes. Also free neglected owner tex on shutdown, and delete hog gears using the normal deletion procedure if for any reason they still exist (EndGame call?).
nemo
parents:
10626
diff
changeset
|
952 |
FreeAndNilTexture(WeaponTooltipTex); |
2747 | 953 |
|
954 |
// image region |
|
955 |
i:= LongInt(atype) - 1; |
|
3853 | 956 |
r.x:= (i shr 4) * 32; |
957 |
r.y:= (i mod 16) * 32; |
|
2747 | 958 |
r.w:= 32; |
959 |
r.h:= 32; |
|
960 |
||
961 |
// default (no extra text) |
|
7134 | 962 |
extra:= _S''; |
2747 | 963 |
extracolor:= 0; |
964 |
||
965 |
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
|
966 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
967 |
extra:= trmsg[sidNotYetAvailable]; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
968 |
extracolor:= LongInt($ffc77070); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
969 |
end |
5518 | 970 |
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
|
971 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
972 |
extra:= trmsg[sidNoEndTurn]; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
973 |
extracolor:= LongInt($ff70c770); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
974 |
end |
3697 | 975 |
else |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
976 |
begin |
7134 | 977 |
extra:= _S''; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
978 |
extracolor:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
979 |
end; |
2747 | 980 |
|
981 |
// render window and return the texture |
|
982 |
WeaponTooltipTex:= RenderHelpWindow(trammo[Ammoz[atype].NameId], trammoc[Ammoz[atype].NameId], trammod[Ammoz[atype].NameId], extra, extracolor, SpritesData[sprAMAmmos].Surface, @r) |
|
2753 | 983 |
end; |
2747 | 984 |
|
985 |
procedure ShowWeaponTooltip(x, y: LongInt); |
|
986 |
begin |
|
987 |
// draw the texture if it exists |
|
988 |
if WeaponTooltipTex <> nil then |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
989 |
DrawTexture(x, y, WeaponTooltipTex) |
2747 | 990 |
end; |
991 |
||
7235
baa69bd025d9
1. Implement new page in frontend with options for video recording.
Stepan777 <stepik-777@mail.ru>
parents:
7198
diff
changeset
|
992 |
{$IFDEF USE_VIDEO_RECORDING} |
7350
1dbf3f4340e0
When compiling with sdl2 use it instead of glut for creating hidden window (as suggested by koda).
Stepan777 <stepik-777@mail.ru>
parents:
7235
diff
changeset
|
993 |
procedure InitOffscreenOpenGL; |
1dbf3f4340e0
When compiling with sdl2 use it instead of glut for creating hidden window (as suggested by koda).
Stepan777 <stepik-777@mail.ru>
parents:
7235
diff
changeset
|
994 |
begin |
1dbf3f4340e0
When compiling with sdl2 use it instead of glut for creating hidden window (as suggested by koda).
Stepan777 <stepik-777@mail.ru>
parents:
7235
diff
changeset
|
995 |
// create hidden window |
11367 | 996 |
SDLwindow:= SDL_CreateWindow(PChar('hedgewars video rendering (SDL2 hidden window)'), |
7350
1dbf3f4340e0
When compiling with sdl2 use it instead of glut for creating hidden window (as suggested by koda).
Stepan777 <stepik-777@mail.ru>
parents:
7235
diff
changeset
|
997 |
SDL_WINDOWPOS_CENTERED_MASK, SDL_WINDOWPOS_CENTERED_MASK, |
1dbf3f4340e0
When compiling with sdl2 use it instead of glut for creating hidden window (as suggested by koda).
Stepan777 <stepik-777@mail.ru>
parents:
7235
diff
changeset
|
998 |
cScreenWidth, cScreenHeight, |
1dbf3f4340e0
When compiling with sdl2 use it instead of glut for creating hidden window (as suggested by koda).
Stepan777 <stepik-777@mail.ru>
parents:
7235
diff
changeset
|
999 |
SDL_WINDOW_HIDDEN or SDL_WINDOW_OPENGL); |
11507 | 1000 |
if SDLCheck(SDLwindow <> nil, 'SDL_CreateWindow', true) then exit; |
7350
1dbf3f4340e0
When compiling with sdl2 use it instead of glut for creating hidden window (as suggested by koda).
Stepan777 <stepik-777@mail.ru>
parents:
7235
diff
changeset
|
1001 |
SetupOpenGL(); |
1dbf3f4340e0
When compiling with sdl2 use it instead of glut for creating hidden window (as suggested by koda).
Stepan777 <stepik-777@mail.ru>
parents:
7235
diff
changeset
|
1002 |
end; |
1dbf3f4340e0
When compiling with sdl2 use it instead of glut for creating hidden window (as suggested by koda).
Stepan777 <stepik-777@mail.ru>
parents:
7235
diff
changeset
|
1003 |
{$ENDIF} // USE_VIDEO_RECORDING |
7180 | 1004 |
|
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
|
1005 |
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
|
1006 |
var flags: Longword = 0; |
6072 | 1007 |
reinit: boolean = false; |
1008 |
{$IFNDEF DARWIN}ico: PSDL_Surface;{$ENDIF} |
|
11360 | 1009 |
x, y: LongInt; |
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
|
1010 |
begin |
8027
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
1011 |
if cOnlyStats then |
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
1012 |
begin |
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
1013 |
MaxTextureSize:= 1024; |
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
1014 |
exit |
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
1015 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
1016 |
if Length(s) = 0 then |
8027
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
1017 |
cFullScreen:= (not cFullScreen) |
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
1018 |
else cFullScreen:= s = '1'; |
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1019 |
|
8354
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1020 |
if cFullScreen then |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1021 |
begin |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1022 |
cScreenWidth:= cFullscreenWidth; |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1023 |
cScreenHeight:= cFullscreenHeight; |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1024 |
end |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1025 |
else |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1026 |
begin |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1027 |
cScreenWidth:= cWindowedWidth; |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1028 |
cScreenHeight:= cWindowedHeight; |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1029 |
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
|
1030 |
|
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
|
1031 |
AddFileLog('Preparing to change video parameters...'); |
6598
fa518383563b
added pause/resume functionality for android, android need the opengl context to be recreated along with textures and whatnot
Xeli
parents:
6580
diff
changeset
|
1032 |
if SDLwindow = 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
|
1033 |
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
|
1034 |
// 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
|
1035 |
WriteToConsole('Init SDL_image... '); |
11507 | 1036 |
if SDLCheck(IMG_Init(IMG_INIT_PNG) <> 0, 'IMG_Init', true) then exit; |
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
|
1037 |
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
|
1038 |
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
|
1039 |
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
|
1040 |
begin |
6675
dab56311daa5
tipped by xeli, ammomenu texture needs to be redrawn on resize to update its position
koda
parents:
6674
diff
changeset
|
1041 |
AmmoMenuInvalidated:= true; |
6611 | 1042 |
{$IFDEF IPHONEOS} |
1043 |
// chFullScr is called when there is a rotation event and needs the SetScale and SetupOpenGL to set up the new resolution |
|
1044 |
// this 6 gl functions are the relevant ones and are hacked together here for optimisation |
|
1045 |
glMatrixMode(GL_MODELVIEW); |
|
1046 |
glPopMatrix; |
|
1047 |
glLoadIdentity(); |
|
1048 |
glScalef(2.0 / cScreenWidth, -2.0 / cScreenHeight, 1.0); |
|
1049 |
glTranslatef(0, -cScreenHeight / 2, 0); |
|
1050 |
glViewport(0, 0, cScreenWidth, cScreenHeight); |
|
1051 |
exit; |
|
1052 |
{$ELSE} |
|
5847 | 1053 |
SetScale(cDefaultZoomLevel); |
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1054 |
{$IFDEF USE_CONTEXT_RESTORE} |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
1055 |
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
|
1056 |
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
|
1057 |
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
|
1058 |
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
|
1059 |
//uTextures.freeModule; //DEBUG ONLY |
6598
fa518383563b
added pause/resume functionality for android, android need the opengl context to be recreated along with textures and whatnot
Xeli
parents:
6580
diff
changeset
|
1060 |
{$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
|
1061 |
AddFileLog('Freeing old primary surface...'); |
6611 | 1062 |
{$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
|
1063 |
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
|
1064 |
|
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
|
1065 |
// 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
|
1066 |
{$IFNDEF WIN32} |
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1067 |
(* On a large number of testers machines, SDL default to software rendering |
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1068 |
when opengl attributes were set. These attributes were "set" after |
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1069 |
CreateWindow in .15, which probably did nothing. |
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1070 |
IMO we should rely on the gl_config defaults from SDL, and use |
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1071 |
SDL_GL_GetAttribute to possibly post warnings if any bad values are set. |
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1072 |
*) |
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
|
1073 |
SetupOpenGLAttributes(); |
5883
a6d764786905
Disable GL SetAttributes for Windows due to many testers with problems. This restores .15 behaviour.
nemo
parents:
5847
diff
changeset
|
1074 |
{$ENDIF} |
11518
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1075 |
|
5187 | 1076 |
// these values in x and y make the window appear in the center |
1077 |
x:= SDL_WINDOWPOS_CENTERED_MASK; |
|
1078 |
y:= SDL_WINDOWPOS_CENTERED_MASK; |
|
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1079 |
|
6021 | 1080 |
if SDLwindow = nil then |
11518
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1081 |
begin |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1082 |
|
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1083 |
// SDL_WINDOW_RESIZABLE makes the window resizable and |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1084 |
// respond to rotation events on mobile devices |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1085 |
flags:= SDL_WINDOW_OPENGL or SDL_WINDOW_SHOWN or SDL_WINDOW_RESIZABLE; |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1086 |
|
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1087 |
{$IFDEF MOBILE} |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1088 |
if isPhone() then |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1089 |
SDL_SetHint('SDL_IOS_ORIENTATIONS','LandscapeLeft LandscapeRight'); |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1090 |
// no need for borders on mobile devices |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1091 |
flags:= flags or SDL_WINDOW_BORDERLESS; |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1092 |
{$ENDIF} |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1093 |
|
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1094 |
if cFullScreen then |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1095 |
flags:= flags or SDL_WINDOW_FULLSCREEN; |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1096 |
|
11367 | 1097 |
SDLwindow:= SDL_CreateWindow(PChar('Hedgewars'), x, y, cScreenWidth, cScreenHeight, flags); |
11518
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1098 |
end |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1099 |
// we're toggling |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1100 |
else if Length(s) = 0 then |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1101 |
begin |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1102 |
if cFullScreen then |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1103 |
begin |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1104 |
SDL_SetWindowSize(SDLwindow, cScreenWidth, cScreenHeight); |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1105 |
SDL_SetWindowFullscreen(SDLwindow, SDL_WINDOW_FULLSCREEN); |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1106 |
end |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1107 |
else |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1108 |
begin |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1109 |
SDL_SetWindowFullscreen(SDLwindow, 0); |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1110 |
SDL_SetWindowSize(SDLwindow, cScreenWidth, cScreenHeight); |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1111 |
SDL_SetWindowPosition(SDLwindow, x, y); |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1112 |
end; |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1113 |
updateViewLimits(); |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1114 |
end; |
02a13be714d2
SDL2: fix toggling fullscreen. dunno how well this works on non-linux-OS
sheepluva
parents:
11507
diff
changeset
|
1115 |
|
11507 | 1116 |
if SDLCheck(SDLwindow <> nil, 'SDL_CreateWindow', true) then exit; |
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
|
1117 |
|
11373 | 1118 |
// load engine ico |
1119 |
{$IFNDEF DARWIN} |
|
1120 |
ico:= LoadDataImage(ptGraphics, 'hwengine', ifIgnoreCaps); |
|
1121 |
if ico <> nil then |
|
1122 |
begin |
|
1123 |
SDL_SetWindowIcon(SDLwindow, ico); |
|
1124 |
SDL_FreeSurface(ico); |
|
1125 |
end; |
|
1126 |
{$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
|
1127 |
SetupOpenGL(); |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1128 |
|
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
1129 |
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
|
1130 |
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
|
1131 |
// clean the window from any previous content |
10304
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10302
diff
changeset
|
1132 |
RenderClear(); |
5704 | 1133 |
if SuddenDeathDmg then |
9295
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1134 |
SetSkyColor(SDSkyColor.r * (SDTint/255) / 255, SDSkyColor.g * (SDTint/255) / 255, SDSkyColor.b * (SDTint/255) / 255) |
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1135 |
else if ((cReducedQuality and rqNoBackground) = 0) then |
9295
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1136 |
SetSkyColor(SkyColor.r / 255, SkyColor.g / 255, SkyColor.b / 255) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
1137 |
else |
9295
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1138 |
SetSkyColor(RQSkyColor.r / 255, RQSkyColor.g / 255, RQSkyColor.b / 255); |
5704 | 1139 |
|
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
|
1140 |
// 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
|
1141 |
ReloadCaptions(false); |
6382
0e76c5cd4250
move the order of reloading texture to workaround buggy drivers
koda
parents:
6380
diff
changeset
|
1142 |
ReloadLines; |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
1143 |
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
|
1144 |
// redraw all land |
7170
84ac6c6d2d8e
Only create textures for non-empty LandPixel chunks. This should save a fair amount of memory, especially on smaller maps, and eliminate a number of draws
nemo
parents:
7151
diff
changeset
|
1145 |
UpdateLandTexture(0, LAND_WIDTH, 0, LAND_HEIGHT, false); |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
1146 |
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
|
1147 |
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
|
1148 |
|
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1149 |
// for sdl1.2 we directly call SDL_WarpMouse() |
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1150 |
// for sdl2 we provide a SDL_WarpMouse() which just calls this function |
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1151 |
// this has the advantage of reducing 'uses' and 'ifdef' statements |
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1152 |
// (SDLwindow is a private member of this module) |
9295
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1153 |
procedure WarpMouse(x, y: Word); inline; |
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1154 |
begin |
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1155 |
SDL_WarpMouseInWindow(SDLwindow, x, y); |
9317
a04c30940d2d
use SDL2 as ifdef symbol because we're not really sdl1.3 compatible, change the compatibility layer, drop unused code, add some documentation
koda
parents:
9295
diff
changeset
|
1156 |
end; |
9295
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1157 |
|
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1158 |
procedure SwapBuffers; {$IFDEF USE_VIDEO_RECORDING}cdecl{$ELSE}inline{$ENDIF}; |
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1159 |
begin |
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1160 |
if GameType = gmtRecord then |
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1161 |
exit; |
9684 | 1162 |
SDL_GL_SwapWindow(SDLwindow); |
9295
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1163 |
end; |
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1164 |
|
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1165 |
procedure SetSkyColor(r, g, b: real); |
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1166 |
begin |
10304
7e40820b7ed6
fix gl2 build, further rendering cleanup WIP, also new chat command: /debugvl
sheepluva
parents:
10302
diff
changeset
|
1167 |
RenderSetClearColor(r, g, b, 0.99) |
9295
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1168 |
end; |
f8819c3dde54
Remove some GLunit dependencies noticed on graph. uUtils was using it for GLfloat - but, the stuff it was returning to was usually converting to "real" anyway. uLand was including it unnecessarily. Minor refactor
nemo
parents:
9080
diff
changeset
|
1169 |
|
3038 | 1170 |
procedure initModule; |
4925 | 1171 |
var ai: TAmmoType; |
1172 |
i: LongInt; |
|
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
1173 |
begin |
6898 | 1174 |
RegisterVariable('fullscr', @chFullScr, 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
|
1175 |
|
7121
ce5e70fe4eb3
http://www.demoties.com/wp-content/uploads/2011/03/mar-01-6.jpg
nemo
parents:
7102
diff
changeset
|
1176 |
cScaleFactor:= 2.0; |
10266 | 1177 |
updateViewLimits(); |
3394
47b51e22e670
Henek's patch - adds a column to ammoMenu and removes the F* column in iphone version
koda
parents:
3390
diff
changeset
|
1178 |
Step:= 0; |
47b51e22e670
Henek's patch - adds a column to ammoMenu and removes the F* column in iphone version
koda
parents:
3390
diff
changeset
|
1179 |
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
|
1180 |
SupportNPOTT:= false; |
4925 | 1181 |
|
1182 |
// init all ammo name texture pointers |
|
1183 |
for ai:= Low(TAmmoType) to High(TAmmoType) do |
|
1184 |
begin |
|
1185 |
Ammoz[ai].NameTex := nil; |
|
1186 |
end; |
|
1187 |
// init all count texture pointers |
|
1188 |
for i:= Low(CountTexz) to High(CountTexz) do |
|
1189 |
CountTexz[i] := nil; |
|
7049 | 1190 |
SDLwindow:= nil; |
1191 |
SDLGLcontext:= nil; |
|
10262 | 1192 |
|
1193 |
prevHat:= 'NoHat'; |
|
1194 |
tmpHatSurf:= nil; |
|
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
1195 |
end; |
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
1196 |
|
3038 | 1197 |
procedure freeModule; |
10640 | 1198 |
var fi: THWFont; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2705
diff
changeset
|
1199 |
begin |
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7013
diff
changeset
|
1200 |
StoreRelease(false); |
10640 | 1201 |
// make sure fonts are cleaned up |
1202 |
for fi:= Low(THWFont) to High(THWFont) do |
|
1203 |
with Fontz[fi] do |
|
1204 |
begin |
|
1205 |
if Handle <> nil then |
|
1206 |
begin |
|
1207 |
TTF_CloseFont(Handle); |
|
1208 |
Handle:= nil; |
|
1209 |
end; |
|
1210 |
end; |
|
1211 |
||
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7013
diff
changeset
|
1212 |
TTF_Quit(); |
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7013
diff
changeset
|
1213 |
SDL_GL_DeleteContext(SDLGLcontext); |
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7013
diff
changeset
|
1214 |
SDL_DestroyWindow(SDLwindow); |
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7013
diff
changeset
|
1215 |
SDL_Quit(); |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2705
diff
changeset
|
1216 |
end; |
4 | 1217 |
end. |