annotate mde/SDL.d @ 20:838577503598

Reworked much of Init. Moved mde.Init to mde.scheduler.Init and largely cleaned up the code. Implemented mde.scheduler.InitStage to reduce dependancies of modules running Init functions. committer: Diggory Hardy <diggory.hardy@gmail.com>
author Diggory Hardy <diggory.hardy@gmail.com>
date Sat, 22 Mar 2008 16:22:59 +0000
parents 5f90774ea1ef
children a60cbb7359dd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
1 /* LICENSE BLOCK
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
2 Part of mde: a Modular D game-oriented Engine
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
3 Copyright © 2007-2008 Diggory Hardy
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
4
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
5 This program is free software; you can redistribute it and/or modify it under the terms of
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
6 the GNU General Public License, version 2, as published by the Free Software Foundation.
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
7
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
8 This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
9 without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
10 See the GNU General Public License for more details.
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
11
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
12 You should have received a copy of the GNU General Public License along
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
13 with this program; if not, write to the Free Software Foundation, Inc.,
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
14 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
5f90774ea1ef Applied the GNU GPL v2 to mde.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 16
diff changeset
15
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
16 /** Just a temporary place to put SDL Init and Video stuff.
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
17 */
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
18 module mde.SDL;
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
19
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
20 import mde.scheduler.InitStage;
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
21 import mde.input.joystick;
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
22
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
23 import tango.util.log.Log : Log, Logger;
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
24 import tango.stdc.stringz;
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
25
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
26 import derelict.sdl.sdl;
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
27 import derelict.opengl.gl;
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
28 import derelict.util.exception;
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
29
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
30 Logger logger;
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
31 static this() {
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
32 logger = Log.getLogger ("mde.SDL");
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
33
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
34 init2.addFunc (&initSdlAndGl);
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
35 init4.addFunc (&setupWindow);
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
36 }
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
37
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
38 void initSdlAndGl() { // init2 func
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
39 // Load SDL and GL dynamic libs
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
40 try {
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
41 DerelictSDL.load();
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
42 DerelictGL.load();
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
43 } catch (DerelictException de) {
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
44 logger.fatal ("Loading dynamic library failed:");
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
45 logger.fatal (de.msg);
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
46
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
47 init2.setFailure ();
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
48 return;
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
49 }
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
50 logger.trace ("Derelict: loaded SDL and OpenGL");
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
51
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
52 // Initialise SDL
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
53 if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_JOYSTICK /+| SDL_INIT_EVENTTHREAD+/)) {
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
54 logger.fatal ("SDL initialisation failed:");
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
55 char* msg = SDL_GetError ();
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
56 logger.fatal (msg ? fromStringz(msg) : "no reason available");
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
57
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
58 init2.setFailure ();
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
59 return;
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
60 }
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
61
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
62 cleanup2.addFunc (&cleanupSDL);
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
63 logger.trace ("SDL initialised");
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
64
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
65 // Must be called after SDL has been initialised, so cannot be a separate Init function.
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
66 openJoysticks (); // after SDL init
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
67 cleanup2.addFunc (&closeJoysticks);
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
68 }
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
69
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
70 void setupWindow() { // init4 func
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
71 // Open a window
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
72 // FIXME: provide a way to re-set video mode and change settings
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
73 if (SDL_SetVideoMode (800, 600, 0, 0) is null) { // Can't open in windows!!
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
74 logger.fatal ("Unable to set video mode:");
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
75 char* msg = SDL_GetError ();
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
76 logger.fatal (msg ? fromStringz(msg) : "no reason available");
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
77
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
78 init4.setFailure ();
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
79 return;
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
80 }
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
81 }
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
82
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
83 void cleanupSDL () {
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
84 SDL_Quit();
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
85 }
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
86
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
87 /+ Load of info-printing stuff (currently doesn't have a use)
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
88 // Print a load of info:
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
89 logger.info ("Available video modes:");
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
90 char[128] tmp;
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
91 SDL_Rect** modes = SDL_ListModes (null, SDL_FULLSCREEN);
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
92 if (modes is null) logger.info ("None!");
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
93 else if (modes is cast(SDL_Rect**) -1) logger.info ("All modes are available");
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
94 else {
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
95 for (uint i = 0; modes[i] !is null; ++i) {
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
96 logger.info (logger.format (tmp, "\t{}x{}", modes[i].w, modes[i].h));
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
97 }
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
98 }
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
99
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
100 SDL_VideoInfo* vi = SDL_GetVideoInfo ();
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
101 if (vi !is null) {
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
102 logger.info ("Video info:");
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
103 logger.info ("Hardware surface support: "~ (vi.flags & SDL_HWSURFACE ? "yes" : "no"));
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
104 logger.info (logger.format (tmp, "Video memory: {}", vi.video_mem));
20
838577503598 Reworked much of Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents: 17
diff changeset
105
16
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
106 if (vi.vfmt !is null) {
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
107 logger.info ("Best video mode:");
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
108 logger.info (logger.format (tmp, "Bits per pixel: {}", vi.vfmt.BitsPerPixel));
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
109 }
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
110 }
9cb7b9310168 Improvements to Options and Init.
Diggory Hardy <diggory.hardy@gmail.com>
parents:
diff changeset
111 +/