author | unc0rr |
Mon, 24 Mar 2014 16:51:39 +0400 | |
changeset 10213 | e924d1935aa6 |
parent 10139 | 9046f69dae4c |
child 10229 | 5d38aaff5564 |
permissions | -rw-r--r-- |
4 | 1 |
(* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
9998 | 3 |
* Copyright (c) 2004-2014 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 |
|
7637
60b213e5ded3
use old approach for printing gl extentions for pas2c (less complex/no StrUtils dependencies)
sheepluva
parents:
7635
diff
changeset
|
24 |
uses {$IFNDEF PAS2C} StrUtils, {$ENDIF}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); |
753 | 45 |
procedure SetupOpenGL; |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2154
diff
changeset
|
46 |
procedure SetScale(f: GLfloat); |
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
47 |
function RenderHelpWindow(caption, subcaption, description, extra: ansistring; extracolor: LongInt; iconsurf: PSDL_Surface; iconrect: PSDL_Rect): PTexture; |
2747 | 48 |
procedure RenderWeaponTooltip(atype: TAmmoType); |
49 |
procedure ShowWeaponTooltip(x, y: LongInt); |
|
50 |
procedure FreeWeaponTooltip; |
|
4889
f71e30eb1d37
Reset things using team colour on change in SetClanColor in lua. This routine had better have been worth it.
nemo
parents:
4874
diff
changeset
|
51 |
procedure MakeCrossHairs; |
7235
baa69bd025d9
1. Implement new page in frontend with options for video recording.
Stepan777 <stepik-777@mail.ru>
parents:
7198
diff
changeset
|
52 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 53 |
procedure InitOffscreenOpenGL; |
7235
baa69bd025d9
1. Implement new page in frontend with options for video recording.
Stepan777 <stepik-777@mail.ru>
parents:
7198
diff
changeset
|
54 |
{$ENDIF} |
4 | 55 |
|
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
|
56 |
{$IFDEF SDL2} |
7049 | 57 |
procedure WarpMouse(x, y: Word); inline; |
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
|
58 |
{$ENDIF} |
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 |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
62 |
{$IFDEF GL2} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
63 |
procedure UpdateModelviewProjection; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
64 |
procedure EnableTexture(enable:Boolean); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
65 |
{$ENDIF} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
66 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
67 |
procedure SetTexCoordPointer(p: Pointer;n: Integer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
68 |
procedure SetVertexPointer(p: Pointer;n: Integer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
69 |
procedure SetColorPointer(p: Pointer;n: Integer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
70 |
procedure BeginWater; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
71 |
procedure EndWater; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
72 |
|
4 | 73 |
implementation |
10015 | 74 |
uses uMisc, uConsole, uVariables, uUtils, uTextures, uRender, uRenderUtils, |
75 |
uCommands, uPhysFSLayer, uDebug |
|
76 |
{$IFDEF GL2}, uMatrix{$ENDIF} |
|
8022 | 77 |
{$IFDEF USE_CONTEXT_RESTORE}, uWorld{$ENDIF} |
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
|
78 |
{$IF NOT DEFINED(SDL2) AND DEFINED(USE_VIDEO_RECORDING)}, glut {$ENDIF}; |
4 | 79 |
|
4385 | 80 |
var MaxTextureSize: LongInt; |
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
|
81 |
{$IFDEF SDL2} |
7049 | 82 |
SDLwindow: PSDL_Window; |
83 |
SDLGLcontext: PSDL_GLContext; |
|
84 |
{$ELSE} |
|
7028 | 85 |
SDLPrimSurface: PSDL_Surface; |
7049 | 86 |
{$ENDIF} |
8145
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8138
diff
changeset
|
87 |
squaresize : LongInt; |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8138
diff
changeset
|
88 |
numsquares : LongInt; |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8138
diff
changeset
|
89 |
ProgrTex: PTexture; |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8138
diff
changeset
|
90 |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
91 |
{$IFDEF GL2} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
92 |
shaderMain: GLuint; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
93 |
shaderWater: GLuint; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
94 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
95 |
// attributes |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
96 |
{$ENDIF} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
97 |
|
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
|
98 |
const |
8145
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8138
diff
changeset
|
99 |
cHHFileName = 'Hedgehog'; |
6408c0ba4ba1
Move global variables to units that use them
Joe Doyle (Ginto8) <ginto8@gmail.com>
parents:
8138
diff
changeset
|
100 |
cCHFileName = 'Crosshair'; |
4 | 101 |
|
10102 | 102 |
function WriteInRect(Surface: PSDL_Surface; X, Y: LongInt; Color: LongWord; Font: THWFont; s: PChar): TSDL_Rect; |
2747 | 103 |
var w, h: LongInt; |
104 |
tmpsurf: PSDL_Surface; |
|
105 |
clr: TSDL_Color; |
|
106 |
finalRect: TSDL_Rect; |
|
107 |
begin |
|
3407 | 108 |
w:= 0; h:= 0; // avoid compiler hints |
10102 | 109 |
TTF_SizeUTF8(Fontz[Font].Handle, s, @w, @h); |
6982 | 110 |
finalRect.x:= X + cFontBorder + 2; |
111 |
finalRect.y:= Y + cFontBorder; |
|
112 |
finalRect.w:= w + cFontBorder * 2 + 4; |
|
113 |
finalRect.h:= h + cFontBorder * 2; |
|
2747 | 114 |
clr.r:= Color shr 16; |
115 |
clr.g:= (Color shr 8) and $FF; |
|
116 |
clr.b:= Color and $FF; |
|
10102 | 117 |
tmpsurf:= TTF_RenderUTF8_Blended(Fontz[Font].Handle, s, clr); |
2747 | 118 |
tmpsurf:= doSurfaceConversion(tmpsurf); |
119 |
SDLTry(tmpsurf <> nil, true); |
|
120 |
SDL_UpperBlit(tmpsurf, nil, Surface, @finalRect); |
|
121 |
SDL_FreeSurface(tmpsurf); |
|
122 |
finalRect.x:= X; |
|
123 |
finalRect.y:= Y; |
|
6982 | 124 |
finalRect.w:= w + cFontBorder * 2 + 4; |
125 |
finalRect.h:= h + cFontBorder * 2; |
|
2747 | 126 |
WriteInRect:= finalRect |
127 |
end; |
|
128 |
||
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
|
129 |
procedure MakeCrossHairs; |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
130 |
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
|
131 |
begin |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
132 |
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
|
133 |
|
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
134 |
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
|
135 |
|
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
136 |
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
|
137 |
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
|
138 |
|
9656 | 139 |
function makeHealthBarTexture(w, h, Color: Longword): PTexture; |
140 |
var |
|
141 |
rr: TSDL_Rect; |
|
142 |
texsurf: PSDL_Surface; |
|
143 |
begin |
|
144 |
rr.x:= 0; |
|
145 |
rr.y:= 0; |
|
146 |
rr.w:= w; |
|
147 |
rr.h:= h; |
|
148 |
||
149 |
texsurf:= SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 32, RMask, GMask, BMask, AMask); |
|
150 |
TryDo(texsurf <> nil, errmsgCreateSurface, true); |
|
151 |
TryDo(SDL_SetColorKey(texsurf, SDL_SRCCOLORKEY, 0) = 0, errmsgTransparentSet, true); |
|
152 |
||
153 |
DrawRoundRect(@rr, cWhiteColor, cNearBlackColor, texsurf, true); |
|
154 |
||
155 |
rr.x:= 2; |
|
156 |
rr.y:= 2; |
|
157 |
rr.w:= w - 4; |
|
158 |
rr.h:= h - 4; |
|
159 |
||
160 |
DrawRoundRect(@rr, Color, Color, texsurf, false); |
|
161 |
makeHealthBarTexture:= Surface2Tex(texsurf, false); |
|
162 |
SDL_FreeSurface(texsurf); |
|
163 |
end; |
|
4 | 164 |
|
6492 | 165 |
procedure WriteNames(Font: THWFont); |
166 |
var t: LongInt; |
|
7495 | 167 |
i, maxLevel: LongInt; |
9656 | 168 |
r: TSDL_Rect; |
6492 | 169 |
drY: LongInt; |
170 |
texsurf, flagsurf, iconsurf: PSDL_Surface; |
|
7495 | 171 |
foundBot: boolean; |
9773 | 172 |
year, month, md : word; |
6492 | 173 |
begin |
10139 | 174 |
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
|
175 |
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
|
176 |
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
|
177 |
drY:= - 4; |
9954 | 178 |
{$IFNDEF PAS2C} |
9773 | 179 |
DecodeDate(Date, year, month, md); |
9954 | 180 |
{$ELSE} |
181 |
year:= 0; |
|
182 |
month:= 0; |
|
183 |
md:= 0; |
|
184 |
{$ENDIF} |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
185 |
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
|
186 |
with TeamsArray[t]^ do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
187 |
begin |
10127 | 188 |
NameTagTex:= RenderStringTexLim(ansistring(TeamName), Clan^.Color, Font, cTeamHealthWidth); |
9791
446e4919b738
Display team owner in teams widget (addresses issue 174)
unc0rr
parents:
9774
diff
changeset
|
189 |
if length(Owner) > 0 then |
10127 | 190 |
OwnerTex:= RenderStringTexLim(ansistring(Owner), Clan^.Color, Font, cTeamHealthWidth); |
690 | 191 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
192 |
r.x:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
193 |
r.y:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
194 |
r.w:= 32; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
195 |
r.h:= 32; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
196 |
texsurf:= SDL_CreateRGBSurface(SDL_SWSURFACE, r.w, r.h, 32, RMask, GMask, BMask, AMask); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
197 |
TryDo(texsurf <> nil, errmsgCreateSurface, true); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
198 |
TryDo(SDL_SetColorKey(texsurf, SDL_SRCCOLORKEY, 0) = 0, errmsgTransparentSet, true); |
2747 | 199 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
200 |
r.w:= 26; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
201 |
r.h:= 19; |
2747 | 202 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
203 |
DrawRoundRect(@r, cWhiteColor, cNearBlackColor, texsurf, true); |
3697 | 204 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
205 |
// overwrite flag for cpu teams and keep players from using it |
7495 | 206 |
foundBot:= false; |
207 |
maxLevel:= -1; |
|
208 |
for i:= 0 to cMaxHHIndex do |
|
209 |
with Hedgehogs[i] do |
|
210 |
if (Gear <> nil) and (BotLevel > 0) then |
|
211 |
begin |
|
212 |
foundBot:= true; |
|
213 |
// initially was going to do the highest botlevel of the team, but for now, just apply if entire team has same bot level |
|
214 |
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
|
215 |
else if (maxLevel > 0) and (maxLevel <> BotLevel) then maxLevel:= 0; |
7495 | 216 |
//if (maxLevel > 0) and (BotLevel < maxLevel) then maxLevel:= BotLevel |
217 |
end |
|
218 |
else if Gear <> nil then maxLevel:= 0; |
|
219 |
||
220 |
if foundBot then |
|
221 |
begin |
|
222 |
// 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
|
223 |
//if (maxLevel > 0) and (maxLevel < 3) then Flag:= 'cpu_plain' else |
7495 | 224 |
Flag:= 'cpu' |
225 |
end |
|
226 |
else if (Flag = 'cpu') or (Flag = 'cpu_plain') then |
|
227 |
Flag:= 'hedgewars'; |
|
3697 | 228 |
|
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
229 |
flagsurf:= LoadDataImageAltFile(ptFlags, Flag, 'hedgewars', ifNone); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
230 |
TryDo(flagsurf <> nil, 'Failed to load flag "' + Flag + '" as well as the default flag', true); |
7495 | 231 |
|
232 |
case maxLevel of |
|
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
|
233 |
1: copyToXY(SpritesData[sprBotlevels].Surface, flagsurf, 0, 0); |
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
|
234 |
2: copyToXYFromRect(SpritesData[sprBotlevels].Surface, flagsurf, 5, 2, 17, 13, 5, 2); |
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
|
235 |
3: copyToXYFromRect(SpritesData[sprBotlevels].Surface, flagsurf, 9, 5, 13, 10, 9, 5); |
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
|
236 |
4: copyToXYFromRect(SpritesData[sprBotlevels].Surface, flagsurf, 13, 9, 9, 6, 13, 9); |
7495 | 237 |
5: copyToXYFromRect(SpritesData[sprBotlevels].Surface, flagsurf, 17, 11, 5, 4, 17, 11) |
238 |
end; |
|
239 |
||
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
240 |
copyToXY(flagsurf, texsurf, 2, 2); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
241 |
SDL_FreeSurface(flagsurf); |
3513
f589230fa21b
now it's possible to select the scheme file in the ifrontendfix a type about loading an image (iphone file system IS case senstive)
koda
parents:
3509
diff
changeset
|
242 |
flagsurf:= nil; |
3697 | 243 |
|
7495 | 244 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
245 |
// restore black border pixels inside the flag |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
246 |
PLongwordArray(texsurf^.pixels)^[32 * 2 + 2]:= cNearBlackColor; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
247 |
PLongwordArray(texsurf^.pixels)^[32 * 2 + 23]:= cNearBlackColor; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
248 |
PLongwordArray(texsurf^.pixels)^[32 * 16 + 2]:= cNearBlackColor; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
249 |
PLongwordArray(texsurf^.pixels)^[32 * 16 + 23]:= cNearBlackColor; |
2747 | 250 |
|
7495 | 251 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
252 |
FlagTex:= Surface2Tex(texsurf, false); |
3041 | 253 |
SDL_FreeSurface(texsurf); |
4874 | 254 |
texsurf:= nil; |
3041 | 255 |
|
10127 | 256 |
AIKillsTex := RenderStringTex(ansistring(inttostr(stats.AIKills)), Clan^.Color, fnt16); |
3773 | 257 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
258 |
dec(drY, r.h + 2); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
259 |
DrawHealthY:= drY; |
7495 | 260 |
for i:= 0 to cMaxHHIndex do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
261 |
with Hedgehogs[i] do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
262 |
if Gear <> nil then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
263 |
begin |
10127 | 264 |
NameTagTex:= RenderStringTexLim(ansistring(Name), Clan^.Color, fnt16, cTeamHealthWidth); |
9773 | 265 |
if Hat = 'NoHat' then |
266 |
begin |
|
9807 | 267 |
if (month = 4) and (md = 20) then |
268 |
Hat := 'eastertop' // Easter |
|
9938 | 269 |
else if (month = 12) and ((md = 24) or (md = 25) or (md = 26)) then |
270 |
Hat := 'Santa' // Christmas Eve/Christmas/Boxing Day |
|
9807 | 271 |
else if (month = 10) and (md = 31) then |
9773 | 272 |
Hat := 'fr_pumpkin'; // Halloween/Hedgewars' birthday |
273 |
end; |
|
10015 | 274 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
275 |
if Hat <> 'NoHat' then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
276 |
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
|
277 |
if (Length(Hat) > 39) and (Copy(Hat,1,8) = 'Reserved') and (Copy(Hat,9,32) = PlayerHash) then |
7754 | 278 |
LoadHedgehogHat(Hedgehogs[i], 'Reserved/' + Copy(Hat,9,Length(Hat)-8)) |
2874
3c7c2bf1ba38
A simple hat reservation mechanism. Can be worked around with a little effort, but to make it useful, you'd have to get everyone you played with to work around it too. Quite a bit of effort for a small reward feature.
nemo
parents:
2873
diff
changeset
|
279 |
else |
7754 | 280 |
LoadHedgehogHat(Hedgehogs[i], Hat); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
281 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
282 |
end; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
283 |
end; |
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
284 |
MissionIcons:= LoadDataImage(ptGraphics, 'missions', ifCritical); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
285 |
iconsurf:= SDL_CreateRGBSurface(SDL_SWSURFACE, 28, 28, 32, RMask, GMask, BMask, AMask); |
3862 | 286 |
if iconsurf <> nil then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
287 |
begin |
3862 | 288 |
r.x:= 0; |
289 |
r.y:= 0; |
|
290 |
r.w:= 28; |
|
291 |
r.h:= 28; |
|
292 |
DrawRoundRect(@r, cWhiteColor, cNearBlackColor, iconsurf, true); |
|
293 |
ropeIconTex:= Surface2Tex(iconsurf, false); |
|
294 |
SDL_FreeSurface(iconsurf); |
|
295 |
iconsurf:= nil; |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
296 |
end; |
9656 | 297 |
|
298 |
||
299 |
for t:= 0 to Pred(ClansCount) do |
|
300 |
with ClansArray[t]^ do |
|
301 |
HealthTex:= makeHealthBarTexture(cTeamHealthWidth + 5, Teams[0]^.NameTagTex^.h, Color); |
|
302 |
||
303 |
GenericHealthTexture:= makeHealthBarTexture(cTeamHealthWidth + 5, TeamsArray[0]^.NameTagTex^.h, cWhiteColor) |
|
6492 | 304 |
end; |
4 | 305 |
|
9656 | 306 |
|
6492 | 307 |
procedure InitHealth; |
308 |
var i, t: LongInt; |
|
309 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
310 |
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
|
311 |
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
|
312 |
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
|
313 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
314 |
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
|
315 |
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
|
316 |
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
|
317 |
end |
6492 | 318 |
end; |
4 | 319 |
|
6492 | 320 |
procedure LoadGraves; |
321 |
var t: LongInt; |
|
322 |
texsurf: PSDL_Surface; |
|
323 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
324 |
for t:= 0 to Pred(TeamsCount) do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
325 |
if TeamsArray[t] <> nil then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
326 |
with TeamsArray[t]^ do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
327 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
328 |
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
|
329 |
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
|
330 |
texsurf:= LoadDataImageAltFile(ptGraves, GraveName, 'Statue', ifCritical or ifTransparent); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
331 |
GraveTex:= Surface2Tex(texsurf, false); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
332 |
SDL_FreeSurface(texsurf) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
333 |
end |
6492 | 334 |
end; |
4 | 335 |
|
6492 | 336 |
procedure StoreLoad(reload: boolean); |
337 |
var s: shortstring; |
|
338 |
ii: TSprite; |
|
844 | 339 |
fi: THWFont; |
340 |
ai: TAmmoType; |
|
341 |
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
|
342 |
i, imflags: LongInt; |
4 | 343 |
begin |
5712 | 344 |
AddFileLog('StoreLoad()'); |
5714 | 345 |
|
10139 | 346 |
if (not reload) and (not cOnlyStats) then |
5714 | 347 |
for fi:= Low(THWFont) to High(THWFont) do |
348 |
with Fontz[fi] do |
|
349 |
begin |
|
8025 | 350 |
s:= cPathz[ptFonts] + '/' + Name; |
5714 | 351 |
WriteToConsole(msgLoading + s + ' (' + inttostr(Height) + 'pt)... '); |
8028 | 352 |
Handle:= TTF_OpenFontRW(rwopsOpenRead(s), true, Height); |
5714 | 353 |
SDLTry(Handle <> nil, true); |
354 |
TTF_SetFontStyle(Handle, style); |
|
355 |
WriteLnToConsole(msgOK) |
|
356 |
end; |
|
53 | 357 |
|
10139 | 358 |
if not cOnlyStats then |
359 |
begin |
|
360 |
MakeCrossHairs; |
|
361 |
LoadGraves; |
|
362 |
end; |
|
363 |
||
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
|
364 |
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
|
365 |
AddProgress; |
4 | 366 |
|
367 |
for ii:= Low(TSprite) to High(TSprite) do |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
368 |
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
|
369 |
// 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
|
370 |
if (((cReducedQuality and (rqNoBackground or rqLowRes)) = 0) or // why rqLowRes? |
10139 | 371 |
(not (ii in [sprSky, sprSkyL, sprSkyR, sprHorizont, sprHorizontL, sprHorizontR]))) |
372 |
and (((cReducedQuality and rqPlainSplash) = 0) or ((not (ii in [sprSplash, sprDroplet, sprSDSplash, sprSDDroplet])))) |
|
373 |
and (((cReducedQuality and rqKillFlakes) = 0) or cSnow or ((not (ii in [sprFlake, sprSDFlake])))) |
|
374 |
and ((cCloudsNumber > 0) or (ii <> sprCloud)) |
|
375 |
and ((vobCount > 0) or (ii <> sprFlake)) |
|
376 |
and (savesurf or (not cOnlyStats)) // in stats-only only load those which are needed later |
|
377 |
then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
378 |
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
|
379 |
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
|
380 |
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
|
381 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
382 |
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
|
383 |
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
|
384 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
385 |
// 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
|
386 |
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
|
387 |
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
|
388 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
389 |
// 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
|
390 |
tmpsurf := LoadDataImageAltPath(Path, AltPath, FileName, imflags) |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
391 |
end; |
2426 | 392 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
393 |
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
|
394 |
begin |
3558 | 395 |
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
|
396 |
begin |
3558 | 397 |
imageWidth:= tmpsurf^.w; |
398 |
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
|
399 |
end; |
3558 | 400 |
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
|
401 |
begin |
3558 | 402 |
Width:= tmpsurf^.w; |
403 |
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
|
404 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
405 |
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
|
406 |
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
|
407 |
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
|
408 |
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
|
409 |
end |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
410 |
else |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
411 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
412 |
Texture:= Surface2Tex(tmpsurf, false); |
4809
9c7d5f802618
rearrange quality flags a little, disable snow rendering on rqLowRes
koda
parents:
4782
diff
changeset
|
413 |
// 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
|
414 |
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
|
415 |
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
|
416 |
end; |
3491 | 417 |
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
|
418 |
// 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
|
419 |
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
|
420 |
begin |
6674 | 421 |
{$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
|
422 |
Surface:= tmpsurf |
5714 | 423 |
{$ELSE} |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
424 |
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
|
425 |
Surface:= tmpsurf |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
426 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
427 |
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
|
428 |
{$ENDIF} |
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
429 |
end |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
430 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
431 |
else |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
432 |
Surface:= nil |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
433 |
end; |
80 | 434 |
|
10139 | 435 |
if not cOnlyStats then |
436 |
begin |
|
437 |
WriteNames(fnt16); |
|
7495 | 438 |
|
10139 | 439 |
if not reload then |
440 |
AddProgress; |
|
441 |
||
442 |
tmpsurf:= LoadDataImage(ptGraphics, cHHFileName, ifAlpha or ifCritical or ifTransparent); |
|
567 | 443 |
|
10139 | 444 |
HHTexture:= Surface2Tex(tmpsurf, false); |
445 |
SDL_FreeSurface(tmpsurf); |
|
446 |
||
447 |
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
|
448 |
|
10139 | 449 |
PauseTexture:= RenderStringTex(trmsg[sidPaused], cYellowColor, fntBig); |
450 |
AFKTexture:= RenderStringTex(trmsg[sidAFK], cYellowColor, fntBig); |
|
451 |
ConfirmTexture:= RenderStringTex(trmsg[sidConfirm], cYellowColor, fntBig); |
|
452 |
SyncTexture:= RenderStringTex(trmsg[sidSync], cYellowColor, fntBig); |
|
4 | 453 |
|
10139 | 454 |
if not reload then |
455 |
AddProgress; |
|
2601 | 456 |
|
10139 | 457 |
// name of weapons in ammo menu |
458 |
for ai:= Low(TAmmoType) to High(TAmmoType) do |
|
459 |
with Ammoz[ai] do |
|
460 |
begin |
|
461 |
TryDo(length(trAmmo[NameId]) > 0,'No default text/translation found for ammo type #' + intToStr(ord(ai)) + '!',true); |
|
462 |
tmpsurf:= TTF_RenderUTF8_Blended(Fontz[CheckCJKFont(trAmmo[NameId],fnt16)].Handle, PChar(trAmmo[NameId]), cWhiteColorChannels); |
|
463 |
TryDo(tmpsurf <> nil,'Name-texture creation for ammo type #' + intToStr(ord(ai)) + ' failed!',true); |
|
464 |
tmpsurf:= doSurfaceConversion(tmpsurf); |
|
465 |
FreeTexture(NameTex); |
|
466 |
NameTex:= Surface2Tex(tmpsurf, false); |
|
467 |
SDL_FreeSurface(tmpsurf) |
|
468 |
end; |
|
469 |
||
470 |
// number of weapons in ammo menu |
|
471 |
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
|
472 |
begin |
10139 | 473 |
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
|
474 |
tmpsurf:= doSurfaceConversion(tmpsurf); |
10139 | 475 |
FreeTexture(CountTexz[i]); |
476 |
CountTexz[i]:= Surface2Tex(tmpsurf, false); |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
477 |
SDL_FreeSurface(tmpsurf) |
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
478 |
end; |
2376 | 479 |
|
10139 | 480 |
if not reload then |
481 |
AddProgress; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
482 |
end; |
844 | 483 |
|
2669 | 484 |
IMG_Quit(); |
4 | 485 |
end; |
486 |
||
8138
cfb228baa598
Invert S3D_DISABLED to more consistent USE_S3D_RENDERING
Chris Wong <lambda.fairy@gmail.com>
parents:
8057
diff
changeset
|
487 |
{$IF DEFINED(USE_S3D_RENDERING) OR DEFINED(USE_VIDEO_RECORDING)} |
7180 | 488 |
procedure CreateFramebuffer(var frame, depth, tex: GLuint); |
489 |
begin |
|
490 |
glGenFramebuffersEXT(1, @frame); |
|
491 |
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frame); |
|
492 |
glGenRenderbuffersEXT(1, @depth); |
|
493 |
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth); |
|
494 |
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, cScreenWidth, cScreenHeight); |
|
495 |
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depth); |
|
496 |
glGenTextures(1, @tex); |
|
497 |
glBindTexture(GL_TEXTURE_2D, tex); |
|
498 |
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, cScreenWidth, cScreenHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil); |
|
499 |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
|
500 |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
|
501 |
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, tex, 0); |
|
502 |
end; |
|
503 |
||
504 |
procedure DeleteFramebuffer(var frame, depth, tex: GLuint); |
|
505 |
begin |
|
506 |
glDeleteTextures(1, @tex); |
|
507 |
glDeleteRenderbuffersEXT(1, @depth); |
|
508 |
glDeleteFramebuffersEXT(1, @frame); |
|
509 |
end; |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
510 |
{$ENDIF} |
7180 | 511 |
|
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
512 |
procedure StoreRelease(reload: boolean); |
4 | 513 |
var ii: TSprite; |
4901 | 514 |
ai: TAmmoType; |
515 |
i, t: LongInt; |
|
4 | 516 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
517 |
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
|
518 |
begin |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
519 |
FreeAndNilTexture(SpritesData[ii].Texture); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
520 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
521 |
if (SpritesData[ii].Surface <> nil) and (not reload) then |
5562 | 522 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
523 |
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
|
524 |
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
|
525 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
526 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
527 |
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
|
528 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
529 |
// free the textures declared in uVariables |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
530 |
FreeAndNilTexture(CrosshairTexture); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
531 |
FreeAndNilTexture(WeaponTooltipTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
532 |
FreeAndNilTexture(PauseTexture); |
9670
1954f692e8c6
Quick and simple implementation of afk mode (toggled by /pause)
unc0rr
parents:
9656
diff
changeset
|
533 |
FreeAndNilTexture(AFKTexture); |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
534 |
FreeAndNilTexture(SyncTexture); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
535 |
FreeAndNilTexture(ConfirmTexture); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
536 |
FreeAndNilTexture(ropeIconTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
537 |
FreeAndNilTexture(HHTexture); |
9656 | 538 |
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
|
539 |
// 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
|
540 |
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
|
541 |
FreeAndNilTexture(Ammoz[ai].NameTex); |
5562 | 542 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
543 |
// 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
|
544 |
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
|
545 |
begin |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
546 |
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
|
547 |
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
|
548 |
end; |
5562 | 549 |
|
9656 | 550 |
for t:= 0 to Pred(ClansCount) do |
551 |
begin |
|
552 |
if ClansArray[t] <> nil then |
|
553 |
FreeAndNilTexture(ClansArray[t]^.HealthTex); |
|
554 |
end; |
|
555 |
||
4901 | 556 |
// free all team and hedgehog textures |
557 |
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
|
558 |
begin |
4901 | 559 |
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
|
560 |
begin |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
561 |
FreeAndNilTexture(TeamsArray[t]^.NameTagTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
562 |
FreeAndNilTexture(TeamsArray[t]^.GraveTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
563 |
FreeAndNilTexture(TeamsArray[t]^.AIKillsTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
564 |
FreeAndNilTexture(TeamsArray[t]^.FlagTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
565 |
|
4901 | 566 |
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
|
567 |
begin |
9655
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
568 |
FreeAndNilTexture(TeamsArray[t]^.Hedgehogs[i].NameTagTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
569 |
FreeAndNilTexture(TeamsArray[t]^.Hedgehogs[i].HealthTagTex); |
e154ccca4dad
Tinted crosshair (without that cool white dot in the middle)
unc0rr
parents:
9530
diff
changeset
|
570 |
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
|
571 |
end; |
4901 | 572 |
end; |
573 |
end; |
|
8446
c18ba8726f5a
Fix sources so pas2c written in haskell could render them again
unc0rr
parents:
8444
diff
changeset
|
574 |
{$IFNDEF PAS2C} |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
575 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 576 |
if defaultFrame <> 0 then |
577 |
DeleteFramebuffer(defaultFrame, depthv, texv); |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
578 |
{$ENDIF} |
8138
cfb228baa598
Invert S3D_DISABLED to more consistent USE_S3D_RENDERING
Chris Wong <lambda.fairy@gmail.com>
parents:
8057
diff
changeset
|
579 |
{$IFDEF USE_S3D_RENDERING} |
8359
9a7024b2a4d3
Removed wiggle 3D mode, reorder the list of 3D modes.
martin_bede
parents:
8354
diff
changeset
|
580 |
if (cStereoMode = smHorizontal) or (cStereoMode = smVertical) then |
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
581 |
begin |
7180 | 582 |
DeleteFramebuffer(framel, depthl, texl); |
583 |
DeleteFramebuffer(framer, depthr, texr); |
|
6380
1ff5ad1d771b
Remove a bunch of unnecessary nil checks. FreeTexture does its own nil check.
nemo
parents:
6379
diff
changeset
|
584 |
end |
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
585 |
{$ENDIF} |
8446
c18ba8726f5a
Fix sources so pas2c written in haskell could render them again
unc0rr
parents:
8444
diff
changeset
|
586 |
{$ENDIF} |
4 | 587 |
end; |
588 |
||
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
|
589 |
|
4 | 590 |
procedure RenderHealth(var Hedgehog: THedgehog); |
95 | 591 |
var s: shortstring; |
4 | 592 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
593 |
str(Hedgehog.Gear^.Health, s); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
594 |
FreeTexture(Hedgehog.HealthTagTex); |
10127 | 595 |
Hedgehog.HealthTagTex:= RenderStringTex(ansistring(s), Hedgehog.Team^.Clan^.Color, fnt16) |
4 | 596 |
end; |
597 |
||
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
|
598 |
function LoadImage(const filename: shortstring; imageFlags: LongInt): PSDL_Surface; |
30 | 599 |
var tmpsurf: PSDL_Surface; |
355 | 600 |
s: shortstring; |
4 | 601 |
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
|
602 |
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
|
603 |
WriteToConsole(msgLoading + filename + '.png [flags: ' + inttostr(imageFlags) + '] '); |
2426 | 604 |
|
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
|
605 |
s:= filename + '.png'; |
8025 | 606 |
tmpsurf:= IMG_Load_RW(rwopsOpenRead(s), true); |
2254 | 607 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
608 |
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
|
609 |
begin |
10129
cd2a64a1f4aa
- Pas2C: make use of 'external' function decorator
unc0rr
parents:
10128
diff
changeset
|
610 |
OutError(msgFailed, false); |
cd2a64a1f4aa
- Pas2C: make use of 'external' function decorator
unc0rr
parents:
10128
diff
changeset
|
611 |
SDLTry(false, (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
|
612 |
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
|
613 |
end; |
2153 | 614 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
615 |
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
|
616 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
617 |
SDL_FreeSurface(tmpsurf); |
8039
a3b86c1f63b4
another tweak tomake --stats-only work on headless servers
Xeli
parents:
8027
diff
changeset
|
618 |
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
|
619 |
// 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
|
620 |
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
|
621 |
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
|
622 |
end; |
351 | 623 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
624 |
tmpsurf:= doSurfaceConversion(tmpsurf); |
2630 | 625 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
626 |
if (imageFlags and ifTransparent) <> 0 then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
627 |
TryDo(SDL_SetColorKey(tmpsurf, SDL_SRCCOLORKEY, 0) = 0, errmsgTransparentSet, true); |
2630 | 628 |
|
3407 | 629 |
WriteLnToConsole(msgOK + ' (' + inttostr(tmpsurf^.w) + 'x' + inttostr(tmpsurf^.h) + ')'); |
2630 | 630 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
631 |
LoadImage:= tmpsurf //Result |
753 | 632 |
end; |
633 |
||
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
634 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
635 |
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
|
636 |
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
|
637 |
begin |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
638 |
// check for file in user dir (never critical) |
8022 | 639 |
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
|
640 |
|
8370 | 641 |
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
|
642 |
end; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
643 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
644 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
645 |
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
|
646 |
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
|
647 |
begin |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
648 |
// 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
|
649 |
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
|
650 |
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
|
651 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
652 |
// 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
|
653 |
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
|
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 |
// 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
|
656 |
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
|
657 |
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
|
658 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
659 |
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
|
660 |
end; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
661 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
662 |
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
|
663 |
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
|
664 |
begin |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
665 |
// 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
|
666 |
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
|
667 |
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
|
668 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
669 |
// 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
|
670 |
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
|
671 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
672 |
// 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
|
673 |
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
|
674 |
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
|
675 |
|
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
676 |
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
|
677 |
end; |
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
678 |
|
7754 | 679 |
procedure LoadHedgehogHat(var HH: THedgehog; newHat: shortstring); |
4874 | 680 |
var texsurf: PSDL_Surface; |
681 |
begin |
|
9774 | 682 |
// 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 |
683 |
if HH.HatTex <> nil then |
|
684 |
begin |
|
685 |
FreeTexture(HH.HatTex); |
|
686 |
HH.HatTex:= nil |
|
687 |
end; |
|
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
688 |
texsurf:= LoadDataImage(ptHats, newHat, ifNone); |
7754 | 689 |
AddFileLog('Hat => '+newHat); |
4874 | 690 |
// only do something if the hat could be loaded |
691 |
if texsurf <> nil then |
|
692 |
begin |
|
7754 | 693 |
AddFileLog('Got Hat'); |
4874 | 694 |
|
695 |
// assign new hat to hedgehog |
|
7754 | 696 |
HH.HatTex:= Surface2Tex(texsurf, true); |
4874 | 697 |
|
698 |
// cleanup: free temporary surface mem |
|
699 |
SDL_FreeSurface(texsurf) |
|
700 |
end; |
|
701 |
end; |
|
702 |
||
2905 | 703 |
function glLoadExtension(extension : shortstring) : boolean; |
2428 | 704 |
begin |
9521
8054d9d775fd
merge with latest defaul, fixing compiling with fpc, parsing and rendering with pas2c, some minor problems with compiling with clang
koda
diff
changeset
|
705 |
//TODO: pas2c does not handle {$IF (GLunit = gles11) OR DEFINED(PAS2C)} |
8032 | 706 |
{$IFNDEF PAS2C} |
4850 | 707 |
{$IF GLunit = gles11} |
4900 | 708 |
// FreePascal doesnt come with OpenGL ES 1.1 Extension headers |
3971 | 709 |
extension:= extension; // avoid hint |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
710 |
glLoadExtension:= false; |
3333 | 711 |
AddFileLog('OpenGL - "' + extension + '" skipped') |
2580
aeccc8f51d3f
completes touch input/control (problems with moving camera)
koda
parents:
2578
diff
changeset
|
712 |
{$ELSE} |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
713 |
glLoadExtension:= glext_LoadExtension(extension); |
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
714 |
if glLoadExtension then |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
715 |
AddFileLog('OpenGL - "' + extension + '" loaded') |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
716 |
else |
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
717 |
AddFileLog('OpenGL - "' + extension + '" failed to load'); |
2568
e654cbfb23ba
Bunch of neat stuff by Smaxx. ATI check, translucent name tags to reduce terrain fail, disabling health crates on invulnerable hogs. Also tweaks to prior stuff.
nemo
parents:
2567
diff
changeset
|
718 |
{$ENDIF} |
10130
a9d509848390
Small fix which makes pas2c engine successfully replay demos
unc0rr
parents:
10129
diff
changeset
|
719 |
|
a9d509848390
Small fix which makes pas2c engine successfully replay demos
unc0rr
parents:
10129
diff
changeset
|
720 |
{$ELSE} // pas2c part |
a9d509848390
Small fix which makes pas2c engine successfully replay demos
unc0rr
parents:
10129
diff
changeset
|
721 |
glLoadExtension:= false; |
8032 | 722 |
{$ENDIF} |
2428 | 723 |
end; |
724 |
||
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
|
725 |
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
|
726 |
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
|
727 |
{$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
|
728 |
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
|
729 |
SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 1); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
730 |
{$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
|
731 |
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
|
732 |
{$ENDIF} |
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
|
733 |
{$IFNDEF SDL2} // vsync is default in SDL2 |
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 |
SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, LongInt((cReducedQuality and rqDesyncVBlank) = 0)); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
735 |
{$ENDIF} |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
736 |
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
|
737 |
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
|
738 |
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
|
739 |
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
|
740 |
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
|
741 |
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
|
742 |
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
|
743 |
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
|
744 |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
745 |
{$IFDEF GL2} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
746 |
function CompileShader(shaderFile: string; shaderType: GLenum): GLuint; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
747 |
var |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
748 |
shader: GLuint; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
749 |
f: Textfile; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
750 |
source, line: AnsiString; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
751 |
sourceA: Pchar; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
752 |
lengthA: GLint; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
753 |
compileResult: GLint; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
754 |
logLength: GLint; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
755 |
log: PChar; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
756 |
begin |
8336
4877d7333818
uStore.pas: Correctly point to shaders
Michael Hartman <omh1280@gmail.com>
parents:
8330
diff
changeset
|
757 |
Assign(f, PathPrefix + cPathz[ptShaders] + '/' + shaderFile); |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
758 |
filemode:= 0; // readonly |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
759 |
Reset(f); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
760 |
if IOResult <> 0 then |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
761 |
begin |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
762 |
AddFileLog('Unable to load ' + shaderFile); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
763 |
halt(-1); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
764 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
765 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
766 |
source:=''; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
767 |
while not eof(f) do |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
768 |
begin |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
769 |
ReadLn(f, line); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
770 |
source:= source + line + #10; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
771 |
end; |
8330 | 772 |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
773 |
Close(f); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
774 |
|
8336
4877d7333818
uStore.pas: Correctly point to shaders
Michael Hartman <omh1280@gmail.com>
parents:
8330
diff
changeset
|
775 |
WriteLnToConsole('Compiling shader: ' + PathPrefix + cPathz[ptShaders] + '/' + shaderFile); |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
776 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
777 |
sourceA:=PChar(source); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
778 |
lengthA:=Length(source); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
779 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
780 |
shader:=glCreateShader(shaderType); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
781 |
glShaderSource(shader, 1, @sourceA, @lengthA); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
782 |
glCompileShader(shader); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
783 |
glGetShaderiv(shader, GL_COMPILE_STATUS, @compileResult); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
784 |
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, @logLength); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
785 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
786 |
if logLength > 1 then |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
787 |
begin |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
788 |
log := GetMem(logLength); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
789 |
glGetShaderInfoLog(shader, logLength, nil, log); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
790 |
WriteLnToConsole('========== Compiler log =========='); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
791 |
WriteLnToConsole(shortstring(log)); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
792 |
WriteLnToConsole('==================================='); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
793 |
FreeMem(log, logLength); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
794 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
795 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
796 |
if compileResult <> GL_TRUE then |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
797 |
begin |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
798 |
WriteLnToConsole('Shader compilation failed, halting'); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
799 |
halt(-1); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
800 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
801 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
802 |
CompileShader:= shader; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
803 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
804 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
805 |
function CompileProgram(shaderName: string): GLuint; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
806 |
var |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
807 |
program_: GLuint; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
808 |
vs, fs: GLuint; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
809 |
linkResult: GLint; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
810 |
logLength: GLint; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
811 |
log: PChar; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
812 |
begin |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
813 |
program_:= glCreateProgram(); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
814 |
vs:= CompileShader(shaderName + '.vs', GL_VERTEX_SHADER); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
815 |
fs:= CompileShader(shaderName + '.fs', GL_FRAGMENT_SHADER); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
816 |
glAttachShader(program_, vs); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
817 |
glAttachShader(program_, fs); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
818 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
819 |
glBindAttribLocation(program_, aVertex, PChar('vertex')); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
820 |
glBindAttribLocation(program_, aTexCoord, PChar('texcoord')); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
821 |
glBindAttribLocation(program_, aColor, PChar('color')); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
822 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
823 |
glLinkProgram(program_); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
824 |
glDeleteShader(vs); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
825 |
glDeleteShader(fs); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
826 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
827 |
glGetProgramiv(program_, GL_LINK_STATUS, @linkResult); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
828 |
glGetProgramiv(program_, GL_INFO_LOG_LENGTH, @logLength); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
829 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
830 |
if logLength > 1 then |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
831 |
begin |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
832 |
log := GetMem(logLength); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
833 |
glGetProgramInfoLog(program_, logLength, nil, log); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
834 |
WriteLnToConsole('========== Compiler log =========='); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
835 |
WriteLnToConsole(shortstring(log)); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
836 |
WriteLnToConsole('==================================='); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
837 |
FreeMem(log, logLength); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
838 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
839 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
840 |
if linkResult <> GL_TRUE then |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
841 |
begin |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
842 |
WriteLnToConsole('Linking program failed, halting'); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
843 |
halt(-1); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
844 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
845 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
846 |
CompileProgram:= program_; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
847 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
848 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
849 |
{$ENDIF} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
850 |
|
753 | 851 |
procedure SetupOpenGL; |
9530 | 852 |
var buf: array[byte] of char; |
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
|
853 |
AuxBufNum: LongInt = 0; |
10127 | 854 |
tmpstr: ansistring; |
7634
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
855 |
tmpint: LongInt; |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
856 |
tmpn: LongInt; |
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
|
857 |
begin |
9521
8054d9d775fd
merge with latest defaul, fixing compiling with fpc, parsing and rendering with pas2c, some minor problems with compiling with clang
koda
diff
changeset
|
858 |
|
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
|
859 |
{$IFDEF SDL2} |
9530 | 860 |
AddFileLog('Setting up OpenGL (using driver: ' + shortstring(SDL_GetCurrentVideoDriver()) + ')'); |
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
|
861 |
{$ELSE} |
9530 | 862 |
buf[0]:= char(0); // avoid compiler hint |
863 |
AddFileLog('Setting up OpenGL (using driver: ' + shortstring(SDL_VideoDriverName(buf, sizeof(buf))) + ')'); |
|
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
|
864 |
{$ENDIF} |
6021 | 865 |
|
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
|
866 |
AuxBufNum:= AuxBufNum; |
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
|
867 |
|
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
|
868 |
{$IFDEF MOBILE} |
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
|
869 |
// 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
|
870 |
// un-comment below and add proper logic to support opengles2.0 |
6885 | 871 |
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); |
872 |
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); |
|
6611 | 873 |
if SDLGLcontext = nil then |
874 |
SDLGLcontext:= SDL_GL_CreateContext(SDLwindow); |
|
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
|
875 |
SDLTry(SDLGLcontext <> nil, true); |
a55aab592950
Ditch the renderer system in sdl1.3 and use the 'old fashioned' sdl/opengl context. This gives us more flexibility and less problem in receiving video events (expecially on mobile platform) as well as not having to care to reset the gl context every time sdl interferes.
koda
parents:
5285
diff
changeset
|
876 |
SDL_GL_SetSwapInterval(1); |
3928
2560731c860d
move all mobile-related functions in their own module, provides a structure for future mobile ports
koda
parents:
3922
diff
changeset
|
877 |
{$ENDIF} |
3405 | 878 |
|
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
|
879 |
// get the max (h and v) size for textures that the gpu can support |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
880 |
glGetIntegerv(GL_MAX_TEXTURE_SIZE, @MaxTextureSize); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
881 |
if MaxTextureSize <= 0 then |
5215
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
882 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
883 |
MaxTextureSize:= 1024; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
884 |
AddFileLog('OpenGL Warning - driver didn''t provide any valid max texture size; assuming 1024'); |
5215
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
885 |
end |
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
886 |
else if (MaxTextureSize < 1024) and (MaxTextureSize >= 512) then |
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
887 |
begin |
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
|
888 |
cReducedQuality := cReducedQuality or rqNoBackground; |
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
|
889 |
AddFileLog('Texture size too small for backgrounds, disabling.'); |
d4c529624460
Try and avoid problem reported by users like RDChrisco with cards that only support 512 texture size, and disable backgrounds. Also, reorganise the rq flags sprite loading a bit. Needs testing to make sure it matches the sprite uses. It should though.
nemo
parents:
5187
diff
changeset
|
890 |
end; |
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
|
891 |
// everyone loves debugging |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
892 |
// find out which gpu we are using (for extension compatibility maybe?) |
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
|
893 |
AddFileLog('OpenGL-- Renderer: ' + shortstring(pchar(glGetString(GL_RENDERER)))); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
894 |
AddFileLog(' |----- Vendor: ' + shortstring(pchar(glGetString(GL_VENDOR)))); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
895 |
AddFileLog(' |----- Version: ' + shortstring(pchar(glGetString(GL_VERSION)))); |
6885 | 896 |
AddFileLog(' |----- Texture Size: ' + inttostr(MaxTextureSize)); |
7635
7a8b2f04c7dd
don't query/print GL_AUX_BUFFERS if video recording is disabled
sheepluva
parents:
7634
diff
changeset
|
897 |
{$IFDEF USE_VIDEO_RECORDING} |
7a8b2f04c7dd
don't query/print GL_AUX_BUFFERS if video recording is disabled
sheepluva
parents:
7634
diff
changeset
|
898 |
glGetIntegerv(GL_AUX_BUFFERS, @AuxBufNum); |
7a8b2f04c7dd
don't query/print GL_AUX_BUFFERS if video recording is disabled
sheepluva
parents:
7634
diff
changeset
|
899 |
AddFileLog(' |----- Number of auxiliary buffers: ' + inttostr(AuxBufNum)); |
7a8b2f04c7dd
don't query/print GL_AUX_BUFFERS if video recording is disabled
sheepluva
parents:
7634
diff
changeset
|
900 |
{$ENDIF} |
9521
8054d9d775fd
merge with latest defaul, fixing compiling with fpc, parsing and rendering with pas2c, some minor problems with compiling with clang
koda
diff
changeset
|
901 |
{$IFNDEF PAS2C} |
7180 | 902 |
AddFileLog(' \----- Extensions: '); |
8838
aa2ffd427f6a
strip PAS2C, old WEB symbols and outdated pas2c sources from default branch, all c-related development is done on the webgl branch
koda
parents:
8370
diff
changeset
|
903 |
|
7634
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
904 |
// fetch extentions and store them in string |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
905 |
tmpstr := StrPas(PChar(glGetString(GL_EXTENSIONS))); |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
906 |
tmpn := WordCount(tmpstr, [' ']); |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
907 |
tmpint := 1; |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
908 |
|
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
909 |
repeat |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
910 |
begin |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
911 |
// print up to 3 extentions per row |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
912 |
// ExtractWord will return empty string if index out of range |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
913 |
AddFileLog(TrimRight( |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
914 |
ExtractWord(tmpint, tmpstr, [' ']) + ' ' + |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
915 |
ExtractWord(tmpint+1, tmpstr, [' ']) + ' ' + |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
916 |
ExtractWord(tmpint+2, tmpstr, [' ']) |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
917 |
)); |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
918 |
tmpint := tmpint + 3; |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
919 |
end; |
ca14ec44b223
print all GL_EXTENSIONS properly to logfile (should a;sp fix build on systems with compiler/lib versions that can't implicity cast PGLubyte to PChar)
sheepluva
parents:
7565
diff
changeset
|
920 |
until (tmpint > tmpn); |
7637
60b213e5ded3
use old approach for printing gl extentions for pas2c (less complex/no StrUtils dependencies)
sheepluva
parents:
7635
diff
changeset
|
921 |
{$ENDIF} |
7180 | 922 |
AddFileLog(''); |
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
|
923 |
|
7180 | 924 |
defaultFrame:= 0; |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
925 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 926 |
if GameType = gmtRecord then |
7371
911b53e8c00a
First try to use framebuffer, instead of auxilary buffer.
Stepan777 <stepik-777@mail.ru>
parents:
7350
diff
changeset
|
927 |
begin |
911b53e8c00a
First try to use framebuffer, instead of auxilary buffer.
Stepan777 <stepik-777@mail.ru>
parents:
7350
diff
changeset
|
928 |
if glLoadExtension('GL_EXT_framebuffer_object') then |
911b53e8c00a
First try to use framebuffer, instead of auxilary buffer.
Stepan777 <stepik-777@mail.ru>
parents:
7350
diff
changeset
|
929 |
begin |
911b53e8c00a
First try to use framebuffer, instead of auxilary buffer.
Stepan777 <stepik-777@mail.ru>
parents:
7350
diff
changeset
|
930 |
CreateFramebuffer(defaultFrame, depthv, texv); |
911b53e8c00a
First try to use framebuffer, instead of auxilary buffer.
Stepan777 <stepik-777@mail.ru>
parents:
7350
diff
changeset
|
931 |
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, defaultFrame); |
911b53e8c00a
First try to use framebuffer, instead of auxilary buffer.
Stepan777 <stepik-777@mail.ru>
parents:
7350
diff
changeset
|
932 |
AddFileLog('Using framebuffer for video recording.'); |
911b53e8c00a
First try to use framebuffer, instead of auxilary buffer.
Stepan777 <stepik-777@mail.ru>
parents:
7350
diff
changeset
|
933 |
end |
911b53e8c00a
First try to use framebuffer, instead of auxilary buffer.
Stepan777 <stepik-777@mail.ru>
parents:
7350
diff
changeset
|
934 |
else if AuxBufNum > 0 then |
7180 | 935 |
begin |
936 |
glDrawBuffer(GL_AUX0); |
|
937 |
glReadBuffer(GL_AUX0); |
|
7635
7a8b2f04c7dd
don't query/print GL_AUX_BUFFERS if video recording is disabled
sheepluva
parents:
7634
diff
changeset
|
938 |
AddFileLog('Using auxiliary buffer for video recording.'); |
7180 | 939 |
end |
940 |
else |
|
941 |
begin |
|
942 |
glDrawBuffer(GL_BACK); |
|
943 |
glReadBuffer(GL_BACK); |
|
944 |
AddFileLog('Warning: off-screen rendering is not supported; using back buffer but it may not work.'); |
|
945 |
end; |
|
946 |
end; |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
947 |
{$ENDIF} |
7180 | 948 |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
949 |
{$IFDEF GL2} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
950 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
951 |
{$IFDEF PAS2C} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
952 |
err := glewInit(); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
953 |
if err <> GLEW_OK then |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
954 |
begin |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
955 |
WriteLnToConsole('Failed to initialize GLEW.'); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
956 |
halt; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
957 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
958 |
{$ENDIF} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
959 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
960 |
{$IFNDEF PAS2C} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
961 |
if not Load_GL_VERSION_2_0 then |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
962 |
halt; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
963 |
{$ENDIF} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
964 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
965 |
shaderWater:= CompileProgram('water'); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
966 |
glUseProgram(shaderWater); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
967 |
glUniform1i(glGetUniformLocation(shaderWater, pchar('tex0')), 0); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
968 |
uWaterMVPLocation:= glGetUniformLocation(shaderWater, pchar('mvp')); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
969 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
970 |
shaderMain:= CompileProgram('default'); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
971 |
glUseProgram(shaderMain); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
972 |
glUniform1i(glGetUniformLocation(shaderMain, pchar('tex0')), 0); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
973 |
uMainMVPLocation:= glGetUniformLocation(shaderMain, pchar('mvp')); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
974 |
uMainTintLocation:= glGetUniformLocation(shaderMain, pchar('tint')); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
975 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
976 |
uCurrentMVPLocation:= uMainMVPLocation; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
977 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
978 |
Tint(255, 255, 255, 255); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
979 |
UpdateModelviewProjection; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
980 |
{$ENDIF} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
981 |
|
8330 | 982 |
{$IFNDEF USE_S3D_RENDERING} |
3696 | 983 |
if (cStereoMode = smHorizontal) or (cStereoMode = smVertical) or (cStereoMode = smAFR) then |
3692 | 984 |
begin |
985 |
// prepare left and right frame buffers and associated textures |
|
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
986 |
if glLoadExtension('GL_EXT_framebuffer_object') then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
987 |
begin |
7180 | 988 |
CreateFramebuffer(framel, depthl, texl); |
989 |
CreateFramebuffer(framer, depthr, texr); |
|
3692 | 990 |
|
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
991 |
// reset |
7180 | 992 |
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, defaultFrame) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
993 |
end |
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
994 |
else |
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4343
diff
changeset
|
995 |
cStereoMode:= smNone; |
3692 | 996 |
end; |
2735 | 997 |
{$ENDIF} |
998 |
||
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
999 |
// set view port to whole window |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1000 |
glViewport(0, 0, cScreenWidth, cScreenHeight); |
2428 | 1001 |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1002 |
{$IFDEF GL2} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1003 |
uMatrix.initModule; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1004 |
hglMatrixMode(MATRIX_MODELVIEW); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1005 |
// prepare default translation/scaling |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1006 |
hglLoadIdentity(); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1007 |
hglScalef(2.0 / cScreenWidth, -2.0 / cScreenHeight, 1.0); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1008 |
hglTranslatef(0, -cScreenHeight / 2, 0); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1009 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1010 |
EnableTexture(True); |
8330 | 1011 |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1012 |
glEnableVertexAttribArray(aVertex); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1013 |
glEnableVertexAttribArray(aTexCoord); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1014 |
glGenBuffers(1, @vBuffer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1015 |
glGenBuffers(1, @tBuffer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1016 |
glGenBuffers(1, @cBuffer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1017 |
{$ELSE} |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1018 |
glMatrixMode(GL_MODELVIEW); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1019 |
// prepare default translation/scaling |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1020 |
glLoadIdentity(); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1021 |
glScalef(2.0 / cScreenWidth, -2.0 / cScreenHeight, 1.0); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1022 |
glTranslatef(0, -cScreenHeight / 2, 0); |
2428 | 1023 |
|
5045
f215eb5d4b75
this supposedly makes hwengine work with sdl 1.3 past rev 5296
koda
parents:
5043
diff
changeset
|
1024 |
// disable/lower perspective correction (will not need it anyway) |
3376 | 1025 |
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); |
1026 |
// disable dithering |
|
1027 |
glDisable(GL_DITHER); |
|
3641 | 1028 |
// enable common states by default as they save a lot |
3376 | 1029 |
glEnable(GL_TEXTURE_2D); |
3697 | 1030 |
glEnableClientState(GL_VERTEX_ARRAY); |
1031 |
glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1032 |
{$ENDIF} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1033 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1034 |
// enable alpha blending |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1035 |
glEnable(GL_BLEND); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1036 |
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1037 |
// disable/lower perspective correction (will not need it anyway) |
4 | 1038 |
end; |
1039 |
||
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1040 |
{$IFDEF GL2} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1041 |
procedure EnableTexture(enable:Boolean); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1042 |
begin |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1043 |
if enable then |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1044 |
glUniform1i(glGetUniformLocation(shaderMain, pchar('enableTexture')), 1) |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1045 |
else |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1046 |
glUniform1i(glGetUniformLocation(shaderMain, pchar('enableTexture')), 0); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1047 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1048 |
{$ENDIF} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1049 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1050 |
procedure SetTexCoordPointer(p: Pointer; n: Integer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1051 |
begin |
10015 | 1052 |
{$IFDEF GL2} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1053 |
glBindBuffer(GL_ARRAY_BUFFER, tBuffer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1054 |
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * n * 2, p, GL_STATIC_DRAW); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1055 |
glEnableVertexAttribArray(aTexCoord); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1056 |
glVertexAttribPointer(aTexCoord, 2, GL_FLOAT, GL_FALSE, 0, pointer(0)); |
10015 | 1057 |
{$ELSE} |
1058 |
n:= n; |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1059 |
glTexCoordPointer(2, GL_FLOAT, 0, p); |
10015 | 1060 |
{$ENDIF} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1061 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1062 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1063 |
procedure SetVertexPointer(p: Pointer; n: Integer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1064 |
begin |
10015 | 1065 |
{$IFDEF GL2} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1066 |
glBindBuffer(GL_ARRAY_BUFFER, vBuffer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1067 |
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * n * 2, p, GL_STATIC_DRAW); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1068 |
glEnableVertexAttribArray(aVertex); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1069 |
glVertexAttribPointer(aVertex, 2, GL_FLOAT, GL_FALSE, 0, pointer(0)); |
10015 | 1070 |
{$ELSE} |
1071 |
n:= n; |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1072 |
glVertexPointer(2, GL_FLOAT, 0, p); |
10015 | 1073 |
{$ENDIF} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1074 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1075 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1076 |
procedure SetColorPointer(p: Pointer; n: Integer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1077 |
begin |
10015 | 1078 |
{$IFDEF GL2} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1079 |
glBindBuffer(GL_ARRAY_BUFFER, cBuffer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1080 |
glBufferData(GL_ARRAY_BUFFER, n * 4, p, GL_STATIC_DRAW); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1081 |
glEnableVertexAttribArray(aColor); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1082 |
glVertexAttribPointer(aColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, pointer(0)); |
10015 | 1083 |
{$ELSE} |
1084 |
n:= n; |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1085 |
glColorPointer(4, GL_UNSIGNED_BYTE, 0, p); |
10015 | 1086 |
{$ENDIF} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1087 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1088 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1089 |
{$IFDEF GL2} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1090 |
procedure UpdateModelviewProjection; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1091 |
var |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1092 |
mvp: TMatrix4x4f; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1093 |
begin |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1094 |
//MatrixMultiply(mvp, mProjection, mModelview); |
10015 | 1095 |
{$HINTS OFF} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1096 |
hglMVP(mvp); |
10015 | 1097 |
{$HINTS ON} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1098 |
glUniformMatrix4fv(uCurrentMVPLocation, 1, GL_FALSE, @mvp[0, 0]); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1099 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1100 |
{$ENDIF} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1101 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1102 |
(* |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1103 |
procedure UpdateProjection; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1104 |
var |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1105 |
s: GLfloat; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1106 |
begin |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1107 |
s:=cScaleFactor; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1108 |
mProjection[0,0]:= s/cScreenWidth; mProjection[0,1]:= 0.0; mProjection[0,2]:=0.0; mProjection[0,3]:= 0.0; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1109 |
mProjection[1,0]:= 0.0; mProjection[1,1]:= -s/cScreenHeight; mProjection[1,2]:=0.0; mProjection[1,3]:= 0.0; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1110 |
mProjection[2,0]:= 0.0; mProjection[2,1]:= 0.0; mProjection[2,2]:=1.0; mProjection[2,3]:= 0.0; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1111 |
mProjection[3,0]:= cStereoDepth; mProjection[3,1]:= s/2; mProjection[3,2]:=0.0; mProjection[3,3]:= 1.0; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1112 |
|
10015 | 1113 |
{$IFDEF GL2} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1114 |
UpdateModelviewProjection; |
10015 | 1115 |
{$ELSE} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1116 |
glMatrixMode(GL_PROJECTION); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1117 |
glLoadMatrixf(@mProjection[0, 0]); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1118 |
glMatrixMode(GL_MODELVIEW); |
10015 | 1119 |
{$ENDIF} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1120 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1121 |
*) |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1122 |
|
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2154
diff
changeset
|
1123 |
procedure SetScale(f: GLfloat); |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2154
diff
changeset
|
1124 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
1125 |
// leave immediately if scale factor did not change |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
1126 |
if f = cScaleFactor then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
1127 |
exit; |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2154
diff
changeset
|
1128 |
|
3523 | 1129 |
if f = cDefaultZoomLevel then |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1130 |
{$IFDEF GL2} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1131 |
hglPopMatrix // "return" to default scaling |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1132 |
{$ELSE} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1133 |
glPopMatrix |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1134 |
{$ENDIF} |
3523 | 1135 |
else // other scaling |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
1136 |
begin |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1137 |
{$IFDEF GL2} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1138 |
hglPushMatrix; // save default scaling |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1139 |
hglLoadIdentity; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1140 |
hglScalef(f / cScreenWidth, -f / cScreenHeight, 1.0); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1141 |
hglTranslatef(0, -cScreenHeight / 2, 0); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1142 |
{$ELSE} |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1143 |
glPushMatrix; // save default scaling |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1144 |
glLoadIdentity; |
3922
44804043b691
iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents:
3906
diff
changeset
|
1145 |
glScalef(f / cScreenWidth, -f / cScreenHeight, 1.0); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1146 |
glTranslatef(0, -cScreenHeight / 2, 0); |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1147 |
{$ENDIF} |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
1148 |
end; |
2258 | 1149 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1150 |
cScaleFactor:= f; |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1151 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1152 |
{$IFDEF GL2} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1153 |
UpdateModelviewProjection; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1154 |
{$ENDIF} |
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2154
diff
changeset
|
1155 |
end; |
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2154
diff
changeset
|
1156 |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1157 |
procedure BeginWater; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1158 |
begin |
10015 | 1159 |
{$IFDEF GL2} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1160 |
glUseProgram(shaderWater); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1161 |
uCurrentMVPLocation:=uWaterMVPLocation; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1162 |
UpdateModelviewProjection; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1163 |
glDisableVertexAttribArray(aTexCoord); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1164 |
glEnableVertexAttribArray(aColor); |
10015 | 1165 |
{$ELSE} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1166 |
glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1167 |
glEnableClientState(GL_COLOR_ARRAY); |
10015 | 1168 |
{$ENDIF} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1169 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1170 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1171 |
procedure EndWater; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1172 |
begin |
10015 | 1173 |
{$IFDEF GL2} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1174 |
glUseProgram(shaderMain); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1175 |
uCurrentMVPLocation:=uMainMVPLocation; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1176 |
UpdateModelviewProjection; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1177 |
glDisableVertexAttribArray(aColor); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1178 |
glEnableVertexAttribArray(aTexCoord); |
10015 | 1179 |
{$ELSE} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1180 |
glDisableClientState(GL_COLOR_ARRAY); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1181 |
glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
10015 | 1182 |
{$ENDIF} |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1183 |
end; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1184 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1185 |
|
510 | 1186 |
//////////////////////////////////////////////////////////////////////////////// |
1187 |
procedure AddProgress; |
|
1188 |
var r: TSDL_Rect; |
|
766 | 1189 |
texsurf: PSDL_Surface; |
510 | 1190 |
begin |
8027
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
1191 |
if cOnlyStats then exit; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1192 |
if Step = 0 then |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1193 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1194 |
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
|
1195 |
texsurf:= LoadDataImage(ptGraphics, 'Progress', ifCritical or ifTransparent); |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2705
diff
changeset
|
1196 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1197 |
ProgrTex:= Surface2Tex(texsurf, false); |
3697 | 1198 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1199 |
squaresize:= texsurf^.w shr 1; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1200 |
numsquares:= texsurf^.h div squaresize; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1201 |
SDL_FreeSurface(texsurf); |
8446
c18ba8726f5a
Fix sources so pas2c written in haskell could render them again
unc0rr
parents:
8444
diff
changeset
|
1202 |
{$IFNDEF PAS2C} |
8204 | 1203 |
with mobileRecord do |
1204 |
if GameLoading <> nil then |
|
1205 |
GameLoading(); |
|
8446
c18ba8726f5a
Fix sources so pas2c written in haskell could render them again
unc0rr
parents:
8444
diff
changeset
|
1206 |
{$ENDIF} |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
1207 |
end; |
1045 | 1208 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1209 |
TryDo(ProgrTex <> nil, 'Error - Progress Texure is nil!', true); |
2284 | 1210 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1211 |
glClear(GL_COLOR_BUFFER_BIT); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
1212 |
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
|
1213 |
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
|
1214 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
1215 |
r.x:= squaresize; |
3697 | 1216 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1217 |
r.y:= (Step mod numsquares) * squaresize; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1218 |
r.w:= squaresize; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1219 |
r.h:= squaresize; |
3697 | 1220 |
|
6999 | 1221 |
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
|
1222 |
|
7049 | 1223 |
SwapBuffers; |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1224 |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1225 |
inc(Step); |
510 | 1226 |
end; |
1227 |
||
1228 |
procedure FinishProgress; |
|
1229 |
begin |
|
8446
c18ba8726f5a
Fix sources so pas2c written in haskell could render them again
unc0rr
parents:
8444
diff
changeset
|
1230 |
{$IFNDEF PAS2C} |
8204 | 1231 |
with mobileRecord do |
1232 |
if GameLoaded <> nil then |
|
1233 |
GameLoaded(); |
|
8446
c18ba8726f5a
Fix sources so pas2c written in haskell could render them again
unc0rr
parents:
8444
diff
changeset
|
1234 |
{$ENDIF} |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1235 |
WriteLnToConsole('Freeing progress surface... '); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1236 |
FreeTexture(ProgrTex); |
6394
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
1237 |
ProgrTex:= nil; |
5714 | 1238 |
Step:= 0 |
510 | 1239 |
end; |
1240 |
||
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
1241 |
function RenderHelpWindow(caption, subcaption, description, extra: ansistring; extracolor: LongInt; iconsurf: PSDL_Surface; iconrect: PSDL_Rect): PTexture; |
2747 | 1242 |
var tmpsurf: PSDL_SURFACE; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1243 |
w, h, i, j: LongInt; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1244 |
font: THWFont; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1245 |
r, r2: TSDL_Rect; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1246 |
wa, ha: LongInt; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1247 |
tmpline, tmpline2, tmpdesc: ansistring; |
2747 | 1248 |
begin |
2843 | 1249 |
// make sure there is a caption as well as a sub caption - description is optional |
10123 | 1250 |
if length(caption) = 0 then |
1251 |
caption:= ansistring('???'); |
|
1252 |
if length(caption) = 0 then |
|
1253 |
subcaption:= ansistring(_S' '); |
|
2843 | 1254 |
|
2841 | 1255 |
font:= CheckCJKFont(caption,fnt16); |
1256 |
font:= CheckCJKFont(subcaption,font); |
|
1257 |
font:= CheckCJKFont(description,font); |
|
1258 |
font:= CheckCJKFont(extra,font); |
|
2747 | 1259 |
|
1260 |
w:= 0; |
|
1261 |
h:= 0; |
|
6982 | 1262 |
wa:= cFontBorder * 2 + 4; |
1263 |
ha:= cFontBorder * 2; |
|
2747 | 1264 |
|
3407 | 1265 |
i:= 0; j:= 0; // avoid compiler hints |
1266 |
||
2747 | 1267 |
// TODO: Recheck height/position calculation |
1268 |
||
1269 |
// get caption's dimensions |
|
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
1270 |
TTF_SizeUTF8(Fontz[font].Handle, PChar(caption), @i, @j); |
2747 | 1271 |
// width adds 36 px (image + space) |
1272 |
w:= i + 36 + wa; |
|
1273 |
h:= j + ha; |
|
1274 |
||
1275 |
// get sub caption's dimensions |
|
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
1276 |
TTF_SizeUTF8(Fontz[font].Handle, PChar(subcaption), @i, @j); |
2747 | 1277 |
// 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
|
1278 |
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
|
1279 |
w:= i + 36 + wa; |
2747 | 1280 |
inc(h, j + ha); |
1281 |
||
1282 |
// get description's dimensions |
|
1283 |
tmpdesc:= description; |
|
10120 | 1284 |
while length(tmpdesc) > 0 do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1285 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1286 |
tmpline:= tmpdesc; |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10130
diff
changeset
|
1287 |
SplitByCharA(tmpline, tmpdesc, '|'); |
10120 | 1288 |
if length(tmpline) > 0 then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1289 |
begin |
10120 | 1290 |
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
|
1291 |
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
|
1292 |
w:= i + wa; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1293 |
inc(h, j + ha) |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1294 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1295 |
end; |
2747 | 1296 |
|
10123 | 1297 |
if length(extra) > 0 then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1298 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1299 |
// get extra label's dimensions |
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
1300 |
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
|
1301 |
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
|
1302 |
w:= i + wa; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1303 |
inc(h, j + ha); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1304 |
end; |
3697 | 1305 |
|
2747 | 1306 |
// add borders space |
1307 |
inc(w, wa); |
|
1308 |
inc(h, ha + 8); |
|
1309 |
||
1310 |
tmpsurf:= SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 32, RMask, GMask, BMask, AMask); |
|
1311 |
TryDo(tmpsurf <> nil, 'RenderHelpWindow: fail to create surface', true); |
|
1312 |
||
1313 |
// render border and background |
|
1314 |
r.x:= 0; |
|
1315 |
r.y:= 0; |
|
1316 |
r.w:= w; |
|
1317 |
r.h:= h; |
|
1318 |
DrawRoundRect(@r, cWhiteColor, cNearBlackColor, tmpsurf, true); |
|
1319 |
||
1320 |
// render caption |
|
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
1321 |
r:= WriteInRect(tmpsurf, 36 + cFontBorder + 2, ha, $ffffffff, font, PChar(caption)); |
2747 | 1322 |
// render sub caption |
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
1323 |
r:= WriteInRect(tmpsurf, 36 + cFontBorder + 2, r.y + r.h, $ffc7c7c7, font, PChar(subcaption)); |
2747 | 1324 |
|
1325 |
// render all description lines |
|
1326 |
tmpdesc:= description; |
|
10120 | 1327 |
while length(tmpdesc) > 0 do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1328 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1329 |
tmpline:= tmpdesc; |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10130
diff
changeset
|
1330 |
SplitByCharA(tmpline, tmpdesc, '|'); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1331 |
r2:= r; |
10120 | 1332 |
if length(tmpline) > 0 then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1333 |
begin |
10120 | 1334 |
r:= WriteInRect(tmpsurf, cFontBorder + 2, r.y + r.h, $ff707070, font, PChar(tmpline)); |
3697 | 1335 |
|
5518 | 1336 |
// render highlighted caption (if there is a ':') |
7134 | 1337 |
tmpline2:= _S''; |
10131
4b4a043111f4
- pas2c recognizes typecasts in initialization expressions
unc0rr
parents:
10130
diff
changeset
|
1338 |
SplitByCharA(tmpline, tmpline2, ':'); |
10120 | 1339 |
if length(tmpline2) > 0 then |
10128 | 1340 |
begin |
1341 |
tmpline:= tmpline + ':'; |
|
1342 |
WriteInRect(tmpsurf, cFontBorder + 2, r2.y + r2.h, $ffc7c7c7, font, PChar(tmpline)); |
|
1343 |
end; |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1344 |
end |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1345 |
end; |
2747 | 1346 |
|
10123 | 1347 |
if length(extra) > 0 then |
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
1348 |
r:= WriteInRect(tmpsurf, cFontBorder + 2, r.y + r.h, extracolor, font, PChar(extra)); |
2747 | 1349 |
|
6982 | 1350 |
r.x:= cFontBorder + 6; |
1351 |
r.y:= cFontBorder + 4; |
|
2747 | 1352 |
r.w:= 32; |
1353 |
r.h:= 32; |
|
1354 |
SDL_FillRect(tmpsurf, @r, $ffffffff); |
|
1355 |
SDL_UpperBlit(iconsurf, iconrect, tmpsurf, @r); |
|
3697 | 1356 |
|
2747 | 1357 |
RenderHelpWindow:= Surface2Tex(tmpsurf, true); |
1358 |
SDL_FreeSurface(tmpsurf) |
|
1359 |
end; |
|
1360 |
||
1361 |
procedure RenderWeaponTooltip(atype: TAmmoType); |
|
1362 |
var r: TSDL_Rect; |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1363 |
i: LongInt; |
10122
cefede760264
Revert 88929358d2e1 in favor of ansistrings implementation in pas2c
unc0rr
parents:
10120
diff
changeset
|
1364 |
extra: ansistring; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1365 |
extracolor: LongInt; |
2747 | 1366 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
1367 |
// don't do anything if the window shouldn't be shown |
3634 | 1368 |
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
|
1369 |
begin |
3634 | 1370 |
WeaponTooltipTex:= nil; |
1371 |
exit |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
1372 |
end; |
2747 | 1373 |
|
1374 |
// free old texture |
|
1375 |
FreeWeaponTooltip; |
|
1376 |
||
1377 |
// image region |
|
1378 |
i:= LongInt(atype) - 1; |
|
3853 | 1379 |
r.x:= (i shr 4) * 32; |
1380 |
r.y:= (i mod 16) * 32; |
|
2747 | 1381 |
r.w:= 32; |
1382 |
r.h:= 32; |
|
1383 |
||
1384 |
// default (no extra text) |
|
10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset
|
1385 |
extra:= _S''; |
2747 | 1386 |
extracolor:= 0; |
1387 |
||
1388 |
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
|
1389 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1390 |
extra:= trmsg[sidNotYetAvailable]; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1391 |
extracolor:= LongInt($ffc77070); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1392 |
end |
5518 | 1393 |
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
|
1394 |
begin |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1395 |
extra:= trmsg[sidNoEndTurn]; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1396 |
extracolor:= LongInt($ff70c770); |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1397 |
end |
3697 | 1398 |
else |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1399 |
begin |
10116
dd27562b6f21
rolling back my PChar stuff, because unC0Rr improves string handling pas2c instead <3
sheepluva
parents:
10108
diff
changeset
|
1400 |
extra:= _S''; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1401 |
extracolor:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1402 |
end; |
2747 | 1403 |
|
1404 |
// render window and return the texture |
|
1405 |
WeaponTooltipTex:= RenderHelpWindow(trammo[Ammoz[atype].NameId], trammoc[Ammoz[atype].NameId], trammod[Ammoz[atype].NameId], extra, extracolor, SpritesData[sprAMAmmos].Surface, @r) |
|
2753 | 1406 |
end; |
2747 | 1407 |
|
1408 |
procedure ShowWeaponTooltip(x, y: LongInt); |
|
1409 |
begin |
|
1410 |
// draw the texture if it exists |
|
1411 |
if WeaponTooltipTex <> nil then |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2910
diff
changeset
|
1412 |
DrawTexture(x, y, WeaponTooltipTex) |
2747 | 1413 |
end; |
1414 |
||
1415 |
procedure FreeWeaponTooltip; |
|
1416 |
begin |
|
5045
f215eb5d4b75
this supposedly makes hwengine work with sdl 1.3 past rev 5296
koda
parents:
5043
diff
changeset
|
1417 |
// free the existing texture (if there is any) |
2747 | 1418 |
FreeTexture(WeaponTooltipTex); |
1419 |
WeaponTooltipTex:= nil |
|
1420 |
end; |
|
1421 |
||
7235
baa69bd025d9
1. Implement new page in frontend with options for video recording.
Stepan777 <stepik-777@mail.ru>
parents:
7198
diff
changeset
|
1422 |
{$IFDEF USE_VIDEO_RECORDING} |
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
|
1423 |
{$IFDEF SDL2} |
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
|
1424 |
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
|
1425 |
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
|
1426 |
// create hidden window |
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
|
1427 |
SDLwindow:= SDL_CreateWindow('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
|
1428 |
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
|
1429 |
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
|
1430 |
SDL_WINDOW_HIDDEN or SDL_WINDOW_OPENGL); |
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
|
1431 |
SDLTry(SDLwindow <> nil, true); |
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
|
1432 |
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
|
1433 |
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
|
1434 |
{$ELSE} |
7180 | 1435 |
procedure InitOffscreenOpenGL; |
1436 |
var ArgCount: LongInt; |
|
1437 |
PrgName: pchar; |
|
1438 |
begin |
|
1439 |
ArgCount:= 1; |
|
1440 |
PrgName:= 'hwengine'; |
|
1441 |
glutInit(@ArgCount, @PrgName); |
|
1442 |
glutInitWindowSize(cScreenWidth, cScreenHeight); |
|
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
|
1443 |
// we do not need a window, but without this call OpenGL will not initialize |
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
|
1444 |
glutCreateWindow('hedgewars video rendering (glut hidden window)'); |
7180 | 1445 |
glutHideWindow(); |
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
|
1446 |
// we do not need to set this callback, but it is required for GLUT3 compat |
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
|
1447 |
glutDisplayFunc(@SwapBuffers); |
7180 | 1448 |
SetupOpenGL(); |
1449 |
end; |
|
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
|
1450 |
{$ENDIF} // SDL2 |
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
|
1451 |
{$ENDIF} // USE_VIDEO_RECORDING |
7180 | 1452 |
|
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
|
1453 |
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
|
1454 |
var flags: Longword = 0; |
6072 | 1455 |
reinit: boolean = false; |
1456 |
{$IFNDEF DARWIN}ico: PSDL_Surface;{$ENDIF} |
|
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
|
1457 |
{$IFDEF SDL2}x, y: LongInt;{$ENDIF} |
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
1458 |
begin |
8027
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
1459 |
if cOnlyStats then |
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
1460 |
begin |
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
1461 |
MaxTextureSize:= 1024; |
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
1462 |
exit |
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
1463 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6515
diff
changeset
|
1464 |
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
|
1465 |
cFullScreen:= (not cFullScreen) |
e5ba3dd12531
make stats-only mode work headless. also skip a few things to save time/memory.
nemo
parents:
7866
diff
changeset
|
1466 |
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
|
1467 |
|
8354
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1468 |
if cFullScreen then |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1469 |
begin |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1470 |
cScreenWidth:= cFullscreenWidth; |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1471 |
cScreenHeight:= cFullscreenHeight; |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1472 |
end |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1473 |
else |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1474 |
begin |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1475 |
cScreenWidth:= cWindowedWidth; |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1476 |
cScreenHeight:= cWindowedHeight; |
c25bee85d6f8
Separated fullscreen and windowed hwengine resolution parameters.
vitiv <nikita.utiu@gmail.com>
parents:
8309
diff
changeset
|
1477 |
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
|
1478 |
|
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
|
1479 |
AddFileLog('Preparing to change video parameters...'); |
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
|
1480 |
{$IFDEF SDL2} |
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
|
1481 |
if SDLwindow = nil then |
6611 | 1482 |
{$ELSE} |
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
1483 |
if SDLPrimSurface = nil then |
6611 | 1484 |
{$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
|
1485 |
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
|
1486 |
// set window title |
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
|
1487 |
{$IFNDEF SDL2} |
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
|
1488 |
SDL_WM_SetCaption(_P'Hedgewars', nil); |
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
|
1489 |
{$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
|
1490 |
WriteToConsole('Init SDL_image... '); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
1491 |
SDLTry(IMG_Init(IMG_INIT_PNG) <> 0, true); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
1492 |
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
|
1493 |
// load engine icon |
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
|
1494 |
{$IFNDEF DARWIN} |
7640
e9e6b4d740f6
clean up LoadImage and UserPathz/AltPath/etc related redundancy by introducing 3 new functions in uStore.pas
sheepluva
parents:
7637
diff
changeset
|
1495 |
ico:= LoadDataImage(ptGraphics, 'hwengine', ifIgnoreCaps); |
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
|
1496 |
if ico <> nil then |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
1497 |
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
|
1498 |
SDL_WM_SetIcon(ico, 0); |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
1499 |
SDL_FreeSurface(ico) |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
1500 |
end; |
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
|
1501 |
{$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
|
1502 |
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
|
1503 |
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
|
1504 |
begin |
6675
dab56311daa5
tipped by xeli, ammomenu texture needs to be redrawn on resize to update its position
koda
parents:
6674
diff
changeset
|
1505 |
AmmoMenuInvalidated:= true; |
6611 | 1506 |
{$IFDEF IPHONEOS} |
1507 |
// chFullScr is called when there is a rotation event and needs the SetScale and SetupOpenGL to set up the new resolution |
|
1508 |
// this 6 gl functions are the relevant ones and are hacked together here for optimisation |
|
1509 |
glMatrixMode(GL_MODELVIEW); |
|
1510 |
glPopMatrix; |
|
1511 |
glLoadIdentity(); |
|
1512 |
glScalef(2.0 / cScreenWidth, -2.0 / cScreenHeight, 1.0); |
|
1513 |
glTranslatef(0, -cScreenHeight / 2, 0); |
|
1514 |
glViewport(0, 0, cScreenWidth, cScreenHeight); |
|
1515 |
exit; |
|
1516 |
{$ELSE} |
|
5847 | 1517 |
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
|
1518 |
{$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
|
1519 |
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
|
1520 |
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
|
1521 |
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
|
1522 |
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
|
1523 |
//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
|
1524 |
{$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
|
1525 |
AddFileLog('Freeing old primary surface...'); |
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
|
1526 |
{$IFNDEF SDL2} |
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
|
1527 |
SDL_FreeSurface(SDLPrimSurface); |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
1528 |
SDLPrimSurface:= nil; |
7085 | 1529 |
{$ENDIF} |
6611 | 1530 |
{$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
|
1531 |
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
|
1532 |
|
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
|
1533 |
// 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
|
1534 |
{$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
|
1535 |
(* 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
|
1536 |
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
|
1537 |
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
|
1538 |
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
|
1539 |
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
|
1540 |
*) |
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
|
1541 |
SetupOpenGLAttributes(); |
5883
a6d764786905
Disable GL SetAttributes for Windows due to many testers with problems. This restores .15 behaviour.
nemo
parents:
5847
diff
changeset
|
1542 |
{$ENDIF} |
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
|
1543 |
{$IFDEF SDL2} |
5187 | 1544 |
// these values in x and y make the window appear in the center |
1545 |
x:= SDL_WINDOWPOS_CENTERED_MASK; |
|
1546 |
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
|
1547 |
// SDL_WINDOW_RESIZABLE makes the window resizable and |
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
|
1548 |
// respond to rotation events on mobile devices |
6624
e049b5bb0ad1
BUUUUURN OBJC AMMOMENU BUUUURNhg diff! (on a separate note, this reduces the codesize by ~37k)
koda
parents:
6614
diff
changeset
|
1549 |
flags:= SDL_WINDOW_OPENGL or SDL_WINDOW_SHOWN or SDL_WINDOW_RESIZABLE; |
5187 | 1550 |
|
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
|
1551 |
{$IFDEF MOBILE} |
6611 | 1552 |
if isPhone() then |
1553 |
SDL_SetHint('SDL_IOS_ORIENTATIONS','LandscapeLeft LandscapeRight'); |
|
6624
e049b5bb0ad1
BUUUUURN OBJC AMMOMENU BUUUURNhg diff! (on a separate note, this reduces the codesize by ~37k)
koda
parents:
6614
diff
changeset
|
1554 |
// no need for borders on mobile devices |
e049b5bb0ad1
BUUUUURN OBJC AMMOMENU BUUUURNhg diff! (on a separate note, this reduces the codesize by ~37k)
koda
parents:
6614
diff
changeset
|
1555 |
flags:= flags or SDL_WINDOW_BORDERLESS; |
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
|
1556 |
{$ENDIF} |
5187 | 1557 |
|
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
|
1558 |
if cFullScreen then |
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
|
1559 |
flags:= flags or SDL_WINDOW_FULLSCREEN; |
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
|
1560 |
|
6021 | 1561 |
if SDLwindow = nil then |
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
|
1562 |
SDLwindow:= SDL_CreateWindow('Hedgewars', x, y, cScreenWidth, cScreenHeight, flags); |
5187 | 1563 |
SDLTry(SDLwindow <> nil, true); |
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
1564 |
{$ELSE} |
5670
e01f0b6f1969
enable window resizing (tested only on linux) - fix issue 103
koda
parents:
5662
diff
changeset
|
1565 |
flags:= SDL_OPENGL or SDL_RESIZABLE; |
5660
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
1566 |
if cFullScreen then |
1647244b3ffe
set gl attributes before creating the window, or some of them might be ignored (like vsync on osx); also don't skip some reloads when switching to fullscreen and back; finally did a little code re-organisation
koda
parents:
5654
diff
changeset
|
1567 |
flags:= flags or SDL_FULLSCREEN; |
5130
3602ede67ec5
Add a parameter for game simulation with no gui/sound enabled, just to get statistics
unc0rr
parents:
5109
diff
changeset
|
1568 |
if not cOnlyStats then |
3602ede67ec5
Add a parameter for game simulation with no gui/sound enabled, just to get statistics
unc0rr
parents:
5109
diff
changeset
|
1569 |
begin |
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
|
1570 |
{$IFDEF WIN32} |
5565 | 1571 |
s:= SDL_getenv('SDL_VIDEO_CENTERED'); |
1572 |
SDL_putenv('SDL_VIDEO_CENTERED=1'); |
|
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
|
1573 |
{$ENDIF} |
8309 | 1574 |
SDLPrimSurface:= SDL_SetVideoMode(cScreenWidth, cScreenHeight, 0, flags); |
5130
3602ede67ec5
Add a parameter for game simulation with no gui/sound enabled, just to get statistics
unc0rr
parents:
5109
diff
changeset
|
1575 |
SDLTry(SDLPrimSurface <> nil, true); |
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
|
1576 |
{$IFDEF WIN32} |
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
|
1577 |
SDL_putenv(str2pchar('SDL_VIDEO_CENTERED=' + s)); |
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
|
1578 |
{$ENDIF} |
5130
3602ede67ec5
Add a parameter for game simulation with no gui/sound enabled, just to get statistics
unc0rr
parents:
5109
diff
changeset
|
1579 |
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
|
1580 |
{$ENDIF} |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4390
diff
changeset
|
1581 |
|
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
|
1582 |
SetupOpenGL(); |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1583 |
|
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
1584 |
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
|
1585 |
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
|
1586 |
// clean the window from any previous content |
f0a9042e7387
yay, finally osx (and likely windows) fullscreen switch works like on linux! ALL textures had to be destroyed and recreated only after the new window got created. In other news, the new window must be cleaned with glClear to skip a first frame of garbage and AddProgress is only called the first time.
koda
parents:
6382
diff
changeset
|
1587 |
glClear(GL_COLOR_BUFFER_BIT); |
5704 | 1588 |
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
|
1589 |
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
|
1590 |
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
|
1591 |
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
|
1592 |
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
|
1593 |
SetSkyColor(RQSkyColor.r / 255, RQSkyColor.g / 255, RQSkyColor.b / 255); |
5704 | 1594 |
|
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
|
1595 |
// 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
|
1596 |
ReloadCaptions(false); |
6382
0e76c5cd4250
move the order of reloading texture to workaround buggy drivers
koda
parents:
6380
diff
changeset
|
1597 |
ReloadLines; |
5608
1e5d925dde9d
Attempt to recreate all textures if using Windows or OSX which lose textures on context recreation.
nemo
parents:
5565
diff
changeset
|
1598 |
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
|
1599 |
// 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
|
1600 |
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
|
1601 |
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
|
1602 |
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
|
1603 |
|
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
|
1604 |
{$IFDEF SDL2} |
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
|
1605 |
// 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
|
1606 |
// 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
|
1607 |
// 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
|
1608 |
// (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
|
1609 |
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
|
1610 |
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
|
1611 |
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
|
1612 |
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
|
1613 |
{$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
|
1614 |
|
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
|
1615 |
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
|
1616 |
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
|
1617 |
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
|
1618 |
exit; |
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
|
1619 |
{$IFDEF SDL2} |
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
|
1620 |
SDL_GL_SwapWindow(SDLwindow); |
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
|
1621 |
{$ELSE} |
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
|
1622 |
SDL_GL_SwapBuffers(); |
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
|
1623 |
{$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
|
1624 |
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
|
1625 |
|
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
|
1626 |
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
|
1627 |
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
|
1628 |
glClearColor(r, g, b, 0.99) |
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
|
1629 |
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
|
1630 |
|
3038 | 1631 |
procedure initModule; |
4925 | 1632 |
var ai: TAmmoType; |
1633 |
i: LongInt; |
|
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
1634 |
begin |
6898 | 1635 |
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
|
1636 |
|
7121
ce5e70fe4eb3
http://www.demoties.com/wp-content/uploads/2011/03/mar-01-6.jpg
nemo
parents:
7102
diff
changeset
|
1637 |
cScaleFactor:= 2.0; |
3394
47b51e22e670
Henek's patch - adds a column to ammoMenu and removes the F* column in iphone version
koda
parents:
3390
diff
changeset
|
1638 |
Step:= 0; |
47b51e22e670
Henek's patch - adds a column to ammoMenu and removes the F* column in iphone version
koda
parents:
3390
diff
changeset
|
1639 |
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
|
1640 |
SupportNPOTT:= false; |
4925 | 1641 |
|
1642 |
// init all ammo name texture pointers |
|
1643 |
for ai:= Low(TAmmoType) to High(TAmmoType) do |
|
1644 |
begin |
|
1645 |
Ammoz[ai].NameTex := nil; |
|
1646 |
end; |
|
1647 |
// init all count texture pointers |
|
1648 |
for i:= Low(CountTexz) to High(CountTexz) do |
|
1649 |
CountTexz[i] := nil; |
|
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
|
1650 |
{$IFDEF SDL2} |
7049 | 1651 |
SDLwindow:= nil; |
1652 |
SDLGLcontext:= nil; |
|
1653 |
{$ELSE} |
|
1654 |
SDLPrimSurface:= nil; |
|
7027 | 1655 |
{$ENDIF} |
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
1656 |
end; |
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2698
diff
changeset
|
1657 |
|
3038 | 1658 |
procedure freeModule; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2705
diff
changeset
|
1659 |
begin |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1660 |
{$IFDEF GL2} |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1661 |
glDeleteProgram(shaderMain); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1662 |
glDeleteProgram(shaderWater); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1663 |
glDeleteBuffers(1, @vBuffer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1664 |
glDeleteBuffers(1, @tBuffer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1665 |
glDeleteBuffers(1, @cBuffer); |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
7866
diff
changeset
|
1666 |
{$ENDIF} |
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7013
diff
changeset
|
1667 |
StoreRelease(false); |
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7013
diff
changeset
|
1668 |
TTF_Quit(); |
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
|
1669 |
{$IFDEF SDL2} |
7026
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7013
diff
changeset
|
1670 |
SDL_GL_DeleteContext(SDLGLcontext); |
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7013
diff
changeset
|
1671 |
SDL_DestroyWindow(SDLwindow); |
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7013
diff
changeset
|
1672 |
{$ENDIF} |
8d1724e1337e
split OnDestroy across the appropriate modules (this doen't cause leaks on mobile, right?)
koda
parents:
7013
diff
changeset
|
1673 |
SDL_Quit(); |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2705
diff
changeset
|
1674 |
end; |
4 | 1675 |
end. |