1 (* Copyright (C) Doom 2D: Forever Developers
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *)
16 {$INCLUDE ../shared/a_modes.inc}
19 interface
21 uses
22 SDL2,
23 sdlcarcass;
26 // ////////////////////////////////////////////////////////////////////////// //
27 // initialize OpenGL; set `gScreenWidth` and `gScreenHeight` before calling this
30 // call this to show built frame
32 // call this to push "quit" event into queue
34 // call this to process queued messages; result is `true` if quit event was received
37 // run main loop, call `buildFrameCB()` and `renderFrameCB()`, maintain the given FPS
41 implementation
43 uses
44 SysUtils;
47 var
53 // ////////////////////////////////////////////////////////////////////////// //
55 begin
60 // ////////////////////////////////////////////////////////////////////////// //
62 var
64 begin
68 if SDL_Init(sdlflags) < 0 then exit; //raise Exception.Create('SDL: Init failed: ' + SDL_GetError());
70 //SDL_Quit();
78 begin
85 begin
94 var
96 begin
102 // ////////////////////////////////////////////////////////////////////////// //
103 // true: quit
105 var
107 begin
111 begin
113 //if (ev.type_ = SDL_QUITEV) then exit;
119 // ////////////////////////////////////////////////////////////////////////// //
121 begin
128 var
131 begin
135 //if gFullscreen then wFlags := wFlags or SDL_WINDOW_FULLSCREEN;
136 //if gWinMaximized then wFlags := wFlags or SDL_WINDOW_MAXIMIZED;
140 //if VSync then v := 1 else v := 0;
148 SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1); // lights; it is enough to have 1-bit stencil buffer for lighting
151 {
152 if gFullscreen then
153 begin
154 mode.w := gScreenWidth;
155 mode.h := gScreenHeight;
156 mode.format := 0;
157 mode.refresh_rate := 0;
158 mode.driverdata := nil;
159 if SDL_GetClosestDisplayMode(0, @mode, @cmode) = nil then
160 begin
161 gScreenWidth := 800;
162 gScreenHeight := 600;
163 end
164 else
165 begin
166 gScreenWidth := cmode.w;
167 gScreenHeight := cmode.h;
168 end;
169 end;
170 }
187 // run main loop, call `buildFrameCB()` and `renderFrameCB()`, maintain the given FPS
189 var
192 begin
200 begin
201 // calculate time to build and render next frame
205 begin
206 // time to build next frame
213 end
214 else
215 begin
216 // has to wait for some time
225 initialization
229 finalization