DEADSOFTWARE

render: remove references to r_playermodel/r_game from game code
[d2df-sdl.git] / src / game / opengl / r_render.pas
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, version 3 of the License ONLY.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 *)
15 {$INCLUDE ../../shared/a_modes.inc}
16 unit r_render;
18 interface
20 uses g_base; // TRectWH
22 procedure r_Render_Initialize;
23 procedure r_Render_Finalize;
25 procedure r_Render_Load;
26 procedure r_Render_Free;
28 procedure r_Render_LoadTextures;
29 procedure r_Render_FreeTextures;
31 procedure r_Render_Update;
32 procedure r_Render_Draw;
34 procedure r_Render_Resize (w, h: Integer);
35 procedure r_Render_Apply;
37 function r_Render_WriteScreenShot (filename: String): Boolean;
39 function r_Render_GetGibRect (m, id: Integer): TRectWH;
40 procedure r_Render_QueueEffect (AnimType, X, Y: Integer);
42 procedure r_Render_DrawLoading (force: Boolean); // !!! remove it
44 implementation
46 uses
47 {$INCLUDE ../../nogl/noGLuses.inc}
48 SysUtils, Classes, Math,
49 e_log, g_system, utils,
50 g_game, g_options, g_console,
51 r_window, r_graphics, r_console, r_playermodel, r_textures, r_animations,
52 r_weapons, r_items, r_gfx, r_monsters, r_map, r_player, r_game
53 ;
55 var
56 LoadedGL: Boolean = false;
58 procedure LoadGL;
59 begin
60 if LoadedGL = false then
61 begin
62 {$IFDEF NOGL_INIT}
63 nogl_Init;
64 if glRenderToFBO and (not nogl_ExtensionSupported('GL_OES_framebuffer_object')) then
65 begin
66 e_LogWriteln('GL: framebuffer objects not supported; disabling FBO rendering');
67 glRenderToFBO := false
68 end;
69 {$ELSE}
70 if glRenderToFBO and (not Load_GL_ARB_framebuffer_object) then
71 begin
72 e_LogWriteln('GL: framebuffer objects not supported; disabling FBO rendering');
73 glRenderToFBO := false
74 end;
75 {$ENDIF}
76 LoadedGL := true
77 end
78 end;
80 procedure FreeGL;
81 begin
82 if LoadedGL = true then
83 begin
84 {$IFDEF NOGL_INIT}
85 nogl_Quit;
86 {$ENDIF}
87 LoadedGL := false
88 end
89 end;
91 procedure r_Render_LoadTextures;
92 begin
93 r_Game_LoadTextures;
94 r_Map_LoadTextures;
95 end;
97 procedure r_Render_FreeTextures;
98 begin
99 r_Map_FreeTextures;
100 r_Game_FreeTextures;
101 end;
103 procedure r_Render_Load;
104 begin
105 r_Game_Load; // load first!
106 r_Player_Load;
107 r_Map_Load;
108 r_PlayerModel_Load;
109 r_Monsters_Load;
110 r_Weapon_Load;
111 r_Items_Load;
112 r_GFX_Load;
113 end;
115 procedure r_Render_Free;
116 begin
117 r_GFX_Free;
118 r_Items_Free;
119 r_Weapon_Free;
120 r_Monsters_Free;
121 r_PlayerModel_Free;
122 r_Map_Free;
123 r_Player_Free;
124 r_Game_Free;
125 g_Texture_DeleteAll;
126 g_Frames_DeleteAll;
127 end;
129 procedure r_Render_Initialize;
130 begin
131 if sys_SetDisplayMode(gRC_Width, gRC_Height, gBPP, gRC_FullScreen, gRC_Maximized) = False then
132 raise Exception.Create('Failed to set videomode on startup.');
133 LoadGL;
134 r_Window_Initialize;
135 r_Console_Init;
136 r_PlayerModel_Initialize;
137 r_Map_Initialize;
138 end;
140 procedure r_Render_Finalize;
141 begin
142 r_Map_Finalize;
143 r_PlayerModel_Finalize;
144 FreeGL;
145 e_ReleaseEngine
146 end;
148 procedure r_Render_Update;
149 begin
150 r_GFX_Update;
151 r_Map_Update;
152 r_PlayerModel_Update;
153 r_Console_Update;
154 end;
156 procedure r_Render_Draw;
157 begin
158 r_Game_Draw;
159 end;
161 procedure r_Render_Resize (w, h: Integer);
162 begin
163 LoadGL;
164 gWinSizeX := w;
165 gWinSizeY := h;
166 gRC_Width := w;
167 gRC_Height := h;
168 if glRenderToFBO then
169 begin
170 // store real window size in gWinSize, downscale resolution now
171 w := round(w / r_pixel_scale);
172 h := round(h / r_pixel_scale);
173 if not e_ResizeFramebuffer(w, h) then
174 begin
175 e_LogWriteln('GL: could not create framebuffer, falling back to --no-fbo');
176 glRenderToFBO := False;
177 w := gWinSizeX;
178 h := gWinSizeY;
179 end;
180 end;
181 gScreenWidth := w;
182 gScreenHeight := h;
183 e_ResizeWindow(w, h);
184 e_InitGL;
185 r_Game_SetupScreenSize;
186 end;
188 procedure r_Render_Apply;
189 begin
190 if sys_SetDisplayMode(Max(1, gRC_Width), Max(1, gRC_Height), Max(1, gBPP), gRC_FullScreen, gRC_Maximized) then
191 e_LogWriteln('resolution changed')
192 else
193 e_LogWriteln('resolution not changed');
194 sys_EnableVSync(gVSync)
195 end;
197 function r_Render_WriteScreenShot (filename: String): Boolean;
198 var s: TStream;
199 begin
200 Result := False;
201 try
202 s := CreateDiskFile(filename);
203 try
204 e_MakeScreenshot(s, gScreenWidth, gScreenHeight);
205 Result := True;
206 except
207 DeleteFile(filename)
208 end;
209 s.Free;
210 finally
211 end
212 end;
214 function r_Render_GetGibRect (m, id: Integer): TRectWH;
215 begin
216 Result := r_PlayerModel_GetGibRect(m, id)
217 end;
219 procedure r_Render_QueueEffect (AnimType, X, Y: Integer);
220 begin
221 r_GFX_OnceAnim(AnimType, X, Y)
222 end;
224 procedure r_Render_DrawLoading (force: Boolean);
225 begin
226 r_Window_DrawLoading(force)
227 end;
229 end.