Mercurial > hg > dmlib
annotate dmsimple.c @ 755:614df17de975
Add mutex locking to audio stream stuff.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 05 May 2013 03:38:49 +0300 |
parents | ce7acde37dc7 |
children | 4dda14ff8e1a |
rev | line source |
---|---|
642
0888971cbff8
Add comment headers to several files.
Matti Hamalainen <ccr@tnsp.org>
parents:
641
diff
changeset
|
1 /* |
0888971cbff8
Add comment headers to several files.
Matti Hamalainen <ccr@tnsp.org>
parents:
641
diff
changeset
|
2 * dmlib |
0888971cbff8
Add comment headers to several files.
Matti Hamalainen <ccr@tnsp.org>
parents:
641
diff
changeset
|
3 * -- Demo engine "player" code |
0888971cbff8
Add comment headers to several files.
Matti Hamalainen <ccr@tnsp.org>
parents:
641
diff
changeset
|
4 * Programmed and designed by Matti 'ccr' Hamalainen |
0888971cbff8
Add comment headers to several files.
Matti Hamalainen <ccr@tnsp.org>
parents:
641
diff
changeset
|
5 * (C) Copyright 2012-2013 Tecnic Software productions (TNSP) |
0888971cbff8
Add comment headers to several files.
Matti Hamalainen <ccr@tnsp.org>
parents:
641
diff
changeset
|
6 */ |
310
713c8018c3ce
Fix includes in the dmsimple engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
278
diff
changeset
|
7 #include <SDL.h> |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
8 #include "dmengine.h" |
310
713c8018c3ce
Fix includes in the dmsimple engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
278
diff
changeset
|
9 #include "dmargs.h" |
593 | 10 #include "dmtext.h" |
11 #include "dmimage.h" | |
591
f165883c2ea6
#include the default setup image and font.
Matti Hamalainen <ccr@tnsp.org>
parents:
578
diff
changeset
|
12 #include "setupfont.h" |
f165883c2ea6
#include the default setup image and font.
Matti Hamalainen <ccr@tnsp.org>
parents:
578
diff
changeset
|
13 #include "setupimage.h" |
608 | 14 #include "setupmenubar.h" |
591
f165883c2ea6
#include the default setup image and font.
Matti Hamalainen <ccr@tnsp.org>
parents:
578
diff
changeset
|
15 |
623 | 16 static const char *engineSetupDataName = "SetupData.txt"; |
603
36b544eb6f4b
Fixes in resource management.
Matti Hamalainen <ccr@tnsp.org>
parents:
600
diff
changeset
|
17 static const char *engineSetupImageName = "SetupImage.png"; |
608 | 18 static const char *engineSetupMenuBarName = "SetupMenuBar.png"; |
603
36b544eb6f4b
Fixes in resource management.
Matti Hamalainen <ccr@tnsp.org>
parents:
600
diff
changeset
|
19 static const char *engineSetupFontName = "SetupFont.dmf"; |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
20 |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
21 static DMEngineData engine; |
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
22 |
121
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
23 static DMOptArg optList[] = |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
24 { |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
25 { 0, '?', "help", "Show this help", OPT_NONE }, |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
26 { 1, 'v', "verbose", "Be more verbose", OPT_NONE }, |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
27 }; |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
28 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
29 const int optListN = sizeof(optList) / sizeof(optList[0]); |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
30 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
31 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
32 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
33 static void argShowHelp() |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
34 { |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
35 dmPrintBanner(stdout, dmProgName, "[options]"); |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
36 dmArgsPrintHelp(stdout, optList, optListN); |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
37 } |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
38 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
39 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
40 static BOOL argHandleOpt(const int optN, char *optArg, char *currArg) |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
41 { |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
42 (void) optArg; |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
43 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
44 switch (optN) |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
45 { |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
46 case 0: |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
47 argShowHelp(); |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
48 exit(0); |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
49 break; |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
50 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
51 case 1: |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
52 dmVerbosity++; |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
53 break; |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
54 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
55 default: |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
56 dmError("Unknown option '%s'.\n", currArg); |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
57 return FALSE; |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
58 } |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
59 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
60 return TRUE; |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
61 } |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
62 |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
63 |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
64 static void engineAudioCallback(void *userdata, Uint8 *stream, int len) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
65 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
66 (void) userdata; |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
67 |
755
614df17de975
Add mutex locking to audio stream stuff.
Matti Hamalainen <ccr@tnsp.org>
parents:
754
diff
changeset
|
68 dmMutexLock(engine.audioStreamMutex); |
754 | 69 engine.audioStreamBuf = stream; |
70 engine.audioStreamLen = len; | |
71 | |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
72 if (engine.paused) |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
73 { |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
74 memset(stream, 0, len); |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
75 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
76 else |
641
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
77 switch (engine.optAudioSetup) |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
78 { |
641
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
79 #ifdef DM_USE_JSS |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
80 case DM_ASETUP_JSS: |
754 | 81 if (engine.jssDev != NULL) |
82 jvmRenderAudio(engine.jssDev, stream, len / jvmGetSampleSize(engine.jssDev)); | |
641
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
83 break; |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
84 #endif |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
85 #ifdef DM_USE_TREMOR |
641
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
86 case DM_ASETUP_TREMOR: |
721
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
87 if (engine.audioPos + len >= engine.audioRes->resSize) |
641
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
88 engine.exitFlag = TRUE; |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
89 else |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
90 { |
721
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
91 memcpy(stream, engine.audioRes->resData + engine.audioPos, len); |
641
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
92 engine.audioPos += len; |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
93 } |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
94 break; |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
95 #endif |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
96 |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
97 default: |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
98 break; |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
99 } |
755
614df17de975
Add mutex locking to audio stream stuff.
Matti Hamalainen <ccr@tnsp.org>
parents:
754
diff
changeset
|
100 |
614df17de975
Add mutex locking to audio stream stuff.
Matti Hamalainen <ccr@tnsp.org>
parents:
754
diff
changeset
|
101 dmMutexUnlock(engine.audioStreamMutex); |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
102 } |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
103 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
104 |
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
105 static int engineShowProgress(int loaded, int total) |
40 | 106 { |
107 int dx = 60, | |
108 dh = 20, | |
109 dw = engine.screen->w - (2 * dx), | |
110 dy = (engine.screen->h - dh) / 2; | |
111 | |
112 if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0) | |
113 return DMERR_INIT_FAIL; | |
114 | |
115 // Draw the progress bar | |
116 dmClearSurface(engine.screen, dmMapRGBA(engine.screen, 0,0,0,0)); | |
117 dmFillRect(engine.screen, dx, dy, dx+dw, dy+dh, dmMapRGB(engine.screen, 255,255,255)); | |
118 dmFillRect(engine.screen, dx+1, dy+1, dx+dw-1, dy+dh-1, dmMapRGB(engine.screen, 0,0,0)); | |
119 | |
120 if (total > 0) | |
121 { | |
122 dmFillRect(engine.screen, | |
123 dx+3, dy+3, | |
124 dx + 3 + ((dw - 3) * loaded) / total, | |
125 dy + dh - 3, | |
126 dmMapRGB(engine.screen, 200,200,200)); | |
127 } | |
128 | |
129 // Flip screen | |
130 if (SDL_MUSTLOCK(engine.screen) != 0) | |
131 SDL_UnlockSurface(engine.screen); | |
132 | |
133 SDL_Flip(engine.screen); | |
134 return DMERR_OK; | |
135 } | |
136 | |
137 | |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
138 static int engineLoadResources() |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
139 { |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
140 int err, loaded = 0, total = 0; |
617
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
141 BOOL first = TRUE; |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
142 |
617
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
143 do |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
144 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
145 // Show a nice progress bar while loading |
617
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
146 if ((err = engineShowProgress(loaded, total)) != DMERR_OK) |
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
147 return err; |
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
148 |
721
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
149 err = dmResourcesPreload(engine.resources, first, &loaded, &total); |
617
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
150 first = FALSE; |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
151 } |
617
35c4fecad3fc
Improve resource loading screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
616
diff
changeset
|
152 while (err == DMERR_PROGRESS); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
153 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
154 return err; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
155 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
156 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
157 |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
158 static BOOL engineGenInitializeVideo(int width, int height, int depth, Uint32 flags) |
332
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
159 { |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
160 dmPrint(1, "Initializing SDL video %d x %d x %dbpp, flags=0x%08x\n", |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
161 width, height, depth, flags); |
332
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
162 |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
163 SDL_FreeSurface(engine.screen); |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
164 |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
165 engine.screen = SDL_SetVideoMode(width, height, depth, flags); |
332
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
166 if (engine.screen == NULL) |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
167 { |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
168 dmError("Can't SDL_SetVideoMode(): %s\n", SDL_GetError()); |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
169 return FALSE; |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
170 } |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
171 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
172 SDL_WM_SetCaption(dmProgDesc, dmProgName); |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
173 |
332
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
174 return TRUE; |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
175 } |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
176 |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
177 |
593 | 178 static BOOL engineInitializeVideo() |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
179 { |
593 | 180 return engineGenInitializeVideo(engine.optVidWidth, engine.optVidHeight, |
181 engine.optVidDepth, engine.optVFlags); | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
182 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
183 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
184 |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
185 typedef struct |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
186 { |
620 | 187 int w, h, aspect; |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
188 } DMModeEntry; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
189 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
190 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
191 DMModeEntry *engineModeList = NULL; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
192 int nengineModeList = 0, aengineModeList = 0; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
193 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
194 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
195 static int engineModeSort(const void *pa, const void *pb) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
196 { |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
197 DMModeEntry |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
198 *va = (DMModeEntry *) pa, |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
199 *vb = (DMModeEntry *) pb; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
200 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
201 return (va->w - vb->w); |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
202 } |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
203 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
204 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
205 int engineAddModeToList(int w, int h) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
206 { |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
207 DMModeEntry *mode; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
208 int i; |
620 | 209 int aspect = engineGetVideoAspect(w, h); |
210 | |
211 if (aspect <= 0) | |
212 return DMERR_INVALID_ARGS; | |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
213 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
214 // Check if the mode is already in our list |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
215 for (i = 0; i < nengineModeList; i++) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
216 { |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
217 mode = &engineModeList[i]; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
218 if (mode->w == w && mode->h == h) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
219 return DMERR_OK; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
220 } |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
221 |
620 | 222 // Check if the mode fits our criteria |
223 switch (engine.optVidSetup) | |
224 { | |
225 case DM_VSETUP_ASPECT: | |
226 if (aspect != engine.optVidAspect) | |
227 return DMERR_OK; | |
228 break; | |
229 | |
230 case DM_VSETUP_ANY: | |
231 break; | |
232 } | |
233 | |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
234 // Reallocate array if needed |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
235 if (nengineModeList + 1 >= aengineModeList) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
236 { |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
237 aengineModeList += 16; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
238 engineModeList = dmRealloc(engineModeList, sizeof(DMModeEntry) * aengineModeList); |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
239 if (engineModeList == NULL) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
240 return DMERR_MALLOC; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
241 } |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
242 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
243 // Store |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
244 mode = &engineModeList[nengineModeList]; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
245 mode->w = w; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
246 mode->h = h; |
620 | 247 mode->aspect = engineGetVideoAspect(w, h); |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
248 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
249 nengineModeList++; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
250 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
251 return DMERR_OK; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
252 } |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
253 |
603
36b544eb6f4b
Fixes in resource management.
Matti Hamalainen <ccr@tnsp.org>
parents:
600
diff
changeset
|
254 |
623 | 255 int engineParseSetupConfig(const char *filename) |
256 { | |
257 DMResource *file = NULL; | |
730
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
258 int res; |
623 | 259 char buf[128]; |
260 | |
730
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
261 if ((res = dmf_open(engine.resources, filename, &file)) != DMERR_OK) |
733 | 262 return res; |
623 | 263 |
264 while (dmfgets(buf, sizeof(buf), file) != NULL) | |
265 { | |
266 ssize_t pos; | |
267 // Trim line ending | |
268 for (pos = strlen(buf) - 1; pos >= 0 && isspace(buf[pos]); pos--) | |
269 buf[pos] = 0; | |
270 | |
271 // Find start of the line | |
272 for (pos = 0; isspace(buf[pos]); pos++); | |
273 | |
274 // Skip empty lines and comments | |
275 if (buf[pos] == 0 || buf[pos] == '#') | |
276 continue; | |
277 | |
278 if (sscanf(buf+pos, "menuPos %f %f", | |
279 &engine.setupMenuPos.x, &engine.setupMenuPos.y) != 2 && | |
280 sscanf(buf+pos, "menuDim %f %f", | |
281 &engine.setupMenuDim.x, &engine.setupMenuDim.y) != 2 && | |
282 sscanf(buf+pos, "text1Pos %f %f", | |
283 &engine.setupText1Pos.x, &engine.setupText1Pos.y) != 2 && | |
635
7092cd50bc08
Add condensed text configuration option to setup screen config.
Matti Hamalainen <ccr@tnsp.org>
parents:
632
diff
changeset
|
284 sscanf(buf+pos, "menuCenter %d", &engine.setupMenuCenter) != 1 && |
7092cd50bc08
Add condensed text configuration option to setup screen config.
Matti Hamalainen <ccr@tnsp.org>
parents:
632
diff
changeset
|
285 sscanf(buf+pos, "textCondensed %d", &engine.setupTextCondensed) != 1) |
623 | 286 { |
287 dmError("Syntax error in configuration:\n%s\n", buf); | |
288 res = DMERR_INVALID_DATA; | |
289 goto out; | |
290 } | |
291 } | |
292 | |
293 out: | |
294 dmf_close(file); | |
295 return res; | |
296 } | |
297 | |
298 | |
299 static inline DMFloat vsX(DMVector vec) | |
300 { | |
301 return (DMFloat) engine.screen->w * vec.x; | |
302 } | |
303 | |
304 | |
305 static inline DMFloat vsY(DMVector vec) | |
306 { | |
307 return (DMFloat) engine.screen->h * vec.y; | |
308 } | |
309 | |
310 | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
311 int engineVideoSetup() |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
312 { |
597
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
313 DMBitmapFont *menuFont = NULL; |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
314 DMResource *file = NULL; |
608 | 315 SDL_Surface *menuBgImage = NULL, *menuBarImage = NULL; |
620 | 316 int result, menuState = -1; |
623 | 317 BOOL menuFullScreen = TRUE; |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
318 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
319 // Compute a list of valid modes |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
320 if (!engineGenInitializeVideo(DM_VSETUP_WIDTH, DM_VSETUP_HEIGHT, engine.optVidDepth, engine.optVFlags)) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
321 goto out; |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
322 |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
323 SDL_Rect **modes = SDL_ListModes(engine.screen->format, engine.screen->flags | SDL_FULLSCREEN); |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
324 if (modes == (SDL_Rect**) 0) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
325 { |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
326 dmError("No compatible video resolutions/depths available at all. Bailing out.\n"); |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
327 goto out; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
328 } |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
329 |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
330 if (modes != (SDL_Rect**) -1) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
331 { |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
332 int i; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
333 for (i = 0; modes[i] != NULL; i++) |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
334 engineAddModeToList(modes[i]->w, modes[i]->h); |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
335 } |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
336 |
620 | 337 if (nengineModeList == 0) |
338 { | |
339 dmError("Umm, no modes found.\n"); | |
340 goto out; | |
341 } | |
342 | |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
343 qsort(engineModeList, nengineModeList, sizeof(engineModeList[0]), engineModeSort); |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
344 |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
345 // Open video temporarily |
593 | 346 if (!engineGenInitializeVideo(DM_VSETUP_WIDTH, DM_VSETUP_HEIGHT, 32, SDL_SWSURFACE | SDL_DOUBLEBUF)) |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
347 goto out; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
348 |
623 | 349 // Get setup data |
350 if (engineParseSetupConfig(engineSetupDataName) != DMERR_OK) | |
351 { | |
352 engine.setupMenuPos.x = 0.18750f; | |
353 engine.setupMenuPos.y = 0.41666f; | |
354 engine.setupMenuDim.x = 0.625f; | |
355 engine.setupMenuDim.y = 0.41666f; | |
356 | |
357 engine.setupText1Pos.x = 0.3f; | |
358 engine.setupText1Pos.y = 0.7f; | |
359 } | |
360 | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
361 // Fetch and decompress setup image, try regular resources first |
730
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
362 if ((result = dmf_open(engine.resources, engineSetupImageName, &file)) == DMERR_OK || |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
363 (result = dmf_create_memio(NULL, engineSetupImageName, engineSetupImage, sizeof(engineSetupImage), &file)) == DMERR_OK) |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
364 { |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
365 menuBgImage = dmLoadImage(file); |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
366 dmf_close(file); |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
367 } |
603
36b544eb6f4b
Fixes in resource management.
Matti Hamalainen <ccr@tnsp.org>
parents:
600
diff
changeset
|
368 |
730
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
369 if ((result = dmf_open(engine.resources, engineSetupMenuBarName, &file)) == DMERR_OK || |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
370 (result = dmf_create_memio(NULL, engineSetupMenuBarName, engineSetupMenuBar, sizeof(engineSetupMenuBar), &file)) == DMERR_OK) |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
371 { |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
372 menuBarImage = dmLoadImage(file); |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
373 dmf_close(file); |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
374 } |
608 | 375 |
376 if (menuBgImage == NULL || menuBarImage == NULL) | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
377 { |
608 | 378 dmError("Could not instantiate setup screen images, %d: %s\n", |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
379 result, dmErrorStr(result)); |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
380 goto out; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
381 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
382 |
593 | 383 if (menuBgImage->w != DM_VSETUP_WIDTH || |
384 menuBgImage->h != DM_VSETUP_HEIGHT) | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
385 { |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
386 dmError("Setup screen background image does not match " |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
387 "required dimensions (%dx%d vs %dx%d)\n", |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
388 menuBgImage->w, menuBgImage->h, |
593 | 389 DM_VSETUP_WIDTH, DM_VSETUP_HEIGHT); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
390 goto out; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
391 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
392 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
393 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
394 // Load up the bitmap font |
730
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
395 if ((result = dmf_open(engine.resources, engineSetupFontName, &file)) == DMERR_OK || |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
396 (result = dmf_create_memio(NULL, engineSetupFontName, engineSetupFont, sizeof(engineSetupFont), &file)) == DMERR_OK) |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
397 { |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
398 result = dmLoadBitmapFont(file, &menuFont); |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
399 dmf_close(file); |
3d813c81f33c
More work on resources API.
Matti Hamalainen <ccr@tnsp.org>
parents:
721
diff
changeset
|
400 } |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
401 if (result != DMERR_OK) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
402 { |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
403 dmError("Could not instantiate setup screen font, %d: %s\n", |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
404 result, dmErrorStr(result)); |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
405 goto out; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
406 } |
614
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
407 |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
408 SDL_Surface *tmp = dmConvertScaledSurface(menuBgImage, |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
409 engine.screen->format, engine.screen->flags, |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
410 engine.screen->w, engine.screen->h); |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
411 if (tmp == NULL) |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
412 { |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
413 dmError("Could not convert setup screen background image.\n"); |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
414 goto out; |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
415 } |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
416 |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
417 SDL_FreeSurface(menuBgImage); |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
418 menuBgImage = tmp; |
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
419 |
597
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
420 SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); |
620 | 421 |
422 | |
423 // Enter the main loop of the menu | |
424 char menuStr[64]; | |
425 int menuOffset = 0, | |
426 menuIndex = 0, | |
427 menuEntryHeight = menuFont->height + 2, | |
623 | 428 menuHeight = vsY(engine.setupMenuDim) / menuEntryHeight; |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
429 |
620 | 430 menuState = 0; |
431 | |
608 | 432 engine.startTime = SDL_GetTicks(); |
620 | 433 |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
434 while (!menuState) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
435 { |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
436 while (SDL_PollEvent(&engine.event)) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
437 switch (engine.event.type) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
438 { |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
439 case SDL_KEYDOWN: |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
440 switch (engine.event.key.keysym.sym) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
441 { |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
442 case SDLK_ESCAPE: |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
443 menuState = -1; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
444 break; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
445 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
446 case SDLK_RETURN: |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
447 menuState = 1; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
448 break; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
449 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
450 case SDLK_UP: |
620 | 451 if (menuIndex > 0) |
452 menuIndex--; | |
453 else | |
454 if (menuOffset > 0) | |
455 menuOffset--; | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
456 break; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
457 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
458 case SDLK_DOWN: |
620 | 459 if (menuIndex < menuHeight - 1 && menuOffset + menuIndex < nengineModeList - 1) |
460 menuIndex++; | |
461 else | |
462 if (menuOffset + menuIndex < nengineModeList - 1) | |
463 menuOffset++; | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
464 break; |
632
78cef1000a18
Make left/right arrow keys to set windowed/fullscreen.
Matti Hamalainen <ccr@tnsp.org>
parents:
631
diff
changeset
|
465 |
78cef1000a18
Make left/right arrow keys to set windowed/fullscreen.
Matti Hamalainen <ccr@tnsp.org>
parents:
631
diff
changeset
|
466 case SDLK_LEFT: |
78cef1000a18
Make left/right arrow keys to set windowed/fullscreen.
Matti Hamalainen <ccr@tnsp.org>
parents:
631
diff
changeset
|
467 menuFullScreen = FALSE; |
78cef1000a18
Make left/right arrow keys to set windowed/fullscreen.
Matti Hamalainen <ccr@tnsp.org>
parents:
631
diff
changeset
|
468 break; |
78cef1000a18
Make left/right arrow keys to set windowed/fullscreen.
Matti Hamalainen <ccr@tnsp.org>
parents:
631
diff
changeset
|
469 |
78cef1000a18
Make left/right arrow keys to set windowed/fullscreen.
Matti Hamalainen <ccr@tnsp.org>
parents:
631
diff
changeset
|
470 case SDLK_RIGHT: |
78cef1000a18
Make left/right arrow keys to set windowed/fullscreen.
Matti Hamalainen <ccr@tnsp.org>
parents:
631
diff
changeset
|
471 menuFullScreen = TRUE; |
78cef1000a18
Make left/right arrow keys to set windowed/fullscreen.
Matti Hamalainen <ccr@tnsp.org>
parents:
631
diff
changeset
|
472 break; |
78cef1000a18
Make left/right arrow keys to set windowed/fullscreen.
Matti Hamalainen <ccr@tnsp.org>
parents:
631
diff
changeset
|
473 |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
474 case SDLK_SPACE: |
623 | 475 menuFullScreen = !menuFullScreen; |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
476 break; |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
477 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
478 default: |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
479 break; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
480 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
481 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
482 break; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
483 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
484 case SDL_QUIT: |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
485 menuState = -1; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
486 break; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
487 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
488 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
489 // Draw frame |
608 | 490 engine.frameTime = SDL_GetTicks(); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
491 if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
492 { |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
493 dmError("Can't lock surface.\n"); |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
494 goto out; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
495 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
496 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
497 // Render the menu |
614
eed8d6abd89b
Pre-convert/scale menu background and use direct blitting.
Matti Hamalainen <ccr@tnsp.org>
parents:
608
diff
changeset
|
498 dmDirectBlitSurface(menuBgImage, engine.screen); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
499 |
597
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
500 // XXX/TODO: Some hardcoded bits here ... |
608 | 501 float t = engineGetTimeDT(&engine); |
620 | 502 int index, entry; |
615 | 503 |
620 | 504 for (index = 0, entry = menuOffset; entry < nengineModeList && index < menuHeight; index++, entry++) |
597
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
505 { |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
506 DMModeEntry *mode = &engineModeList[entry]; |
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
507 |
620 | 508 if (entry == menuOffset + menuIndex) |
509 { | |
510 dmScaledBlitSurface32to32TransparentGA(menuBarImage, | |
623 | 511 vsX(engine.setupMenuPos), |
512 vsY(engine.setupMenuPos) + (index * menuEntryHeight), | |
513 vsX(engine.setupMenuDim), | |
753
8dd6d512cbb2
Add variable for detecting if we are in "native" video resolution.
Matti Hamalainen <ccr@tnsp.org>
parents:
733
diff
changeset
|
514 menuEntryHeight + 4, |
620 | 515 engine.screen, |
516 200 + sin(t * 10.0) * 50); | |
517 } | |
518 | |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
519 snprintf(menuStr, sizeof(menuStr), |
620 | 520 "%4d X %4d [%d:%d]", |
521 mode->w, mode->h, | |
522 mode->aspect / 1000, | |
523 mode->aspect % 1000); | |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
524 |
623 | 525 DMFloat posX = engine.setupMenuCenter ? |
526 2.0f + (vsX(engine.setupMenuDim) - menuFont->width * strlen(menuStr)) / 2.0f : | |
527 2.0f; | |
528 | |
597
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
529 dmDrawBMTextConst( |
635
7092cd50bc08
Add condensed text configuration option to setup screen config.
Matti Hamalainen <ccr@tnsp.org>
parents:
632
diff
changeset
|
530 engine.screen, menuFont, |
7092cd50bc08
Add condensed text configuration option to setup screen config.
Matti Hamalainen <ccr@tnsp.org>
parents:
632
diff
changeset
|
531 engine.setupTextCondensed, DMD_TRANSPARENT, |
623 | 532 vsX(engine.setupMenuPos) + posX, |
753
8dd6d512cbb2
Add variable for detecting if we are in "native" video resolution.
Matti Hamalainen <ccr@tnsp.org>
parents:
733
diff
changeset
|
533 vsY(engine.setupMenuPos) + (index * menuEntryHeight), |
597
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
534 menuStr); |
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
535 } |
8a9361179a1a
More work on the video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
595
diff
changeset
|
536 |
619
6c23042c546f
Aaaand some more work on mode selector.
Matti Hamalainen <ccr@tnsp.org>
parents:
618
diff
changeset
|
537 dmDrawBMTextConst( |
635
7092cd50bc08
Add condensed text configuration option to setup screen config.
Matti Hamalainen <ccr@tnsp.org>
parents:
632
diff
changeset
|
538 engine.screen, menuFont, |
7092cd50bc08
Add condensed text configuration option to setup screen config.
Matti Hamalainen <ccr@tnsp.org>
parents:
632
diff
changeset
|
539 engine.setupTextCondensed, DMD_TRANSPARENT, |
623 | 540 vsX(engine.setupText1Pos), |
541 vsY(engine.setupText1Pos), | |
542 menuFullScreen ? | |
543 "FULLSCREEN" : | |
544 " WINDOWED "); | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
545 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
546 // Flip screen |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
547 if (SDL_MUSTLOCK(engine.screen) != 0) |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
548 SDL_UnlockSurface(engine.screen); |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
549 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
550 SDL_Flip(engine.screen); |
616
ed4536641796
A bit slower screen update rate.
Matti Hamalainen <ccr@tnsp.org>
parents:
615
diff
changeset
|
551 SDL_Delay(25); |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
552 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
553 |
621 | 554 // Okay, we accepted the selection |
555 if (menuState == 1) | |
556 { | |
557 DMModeEntry *mode = &engineModeList[menuOffset + menuIndex]; | |
753
8dd6d512cbb2
Add variable for detecting if we are in "native" video resolution.
Matti Hamalainen <ccr@tnsp.org>
parents:
733
diff
changeset
|
558 engine.optVidNative = |
8dd6d512cbb2
Add variable for detecting if we are in "native" video resolution.
Matti Hamalainen <ccr@tnsp.org>
parents:
733
diff
changeset
|
559 mode->w == engine.optVidWidth && |
8dd6d512cbb2
Add variable for detecting if we are in "native" video resolution.
Matti Hamalainen <ccr@tnsp.org>
parents:
733
diff
changeset
|
560 mode->h == engine.optVidHeight; |
8dd6d512cbb2
Add variable for detecting if we are in "native" video resolution.
Matti Hamalainen <ccr@tnsp.org>
parents:
733
diff
changeset
|
561 |
621 | 562 engine.optVidWidth = mode->w; |
563 engine.optVidHeight = mode->h; | |
564 engine.optVidAspect = mode->aspect; | |
623 | 565 if (menuFullScreen) |
621 | 566 engine.optVFlags |= SDL_FULLSCREEN; |
753
8dd6d512cbb2
Add variable for detecting if we are in "native" video resolution.
Matti Hamalainen <ccr@tnsp.org>
parents:
733
diff
changeset
|
567 |
621 | 568 } |
569 | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
570 out: |
608 | 571 SDL_FreeSurface(menuBgImage); |
572 SDL_FreeSurface(menuBarImage); | |
573 dmFreeBitmapFont(menuFont); | |
574 | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
575 return menuState; |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
576 } |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
577 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
578 |
593 | 579 int engineGetVideoAspect(int width, int height) |
580 { | |
581 if (width > 0 && height > 0) | |
582 return (width * 1000) / height; | |
583 else | |
584 return 1; | |
585 } | |
586 | |
587 | |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
588 int main(int argc, char *argv[]) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
589 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
590 int err; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
591 BOOL initSDL = FALSE; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
592 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
593 memset(&engine, 0, sizeof(engine)); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
594 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
595 // Pre-initialization |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
596 if ((err = demoPreInit(&engine)) != DMERR_OK) |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
597 goto error_exit; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
598 |
121
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
599 if (!dmArgsProcess(argc, argv, optList, optListN, |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
600 argHandleOpt, NULL, FALSE)) |
16fc6e6cf3b5
Move option handling to the simple demo engine.
Matti Hamalainen <ccr@tnsp.org>
parents:
113
diff
changeset
|
601 return DMERR_INIT_FAIL; |
123
6f7356f3b91c
Add engine startup messages showing prod name and "TNSP simple demoengine blurb".
Matti Hamalainen <ccr@tnsp.org>
parents:
122
diff
changeset
|
602 |
6f7356f3b91c
Add engine startup messages showing prod name and "TNSP simple demoengine blurb".
Matti Hamalainen <ccr@tnsp.org>
parents:
122
diff
changeset
|
603 dmPrint(0, |
6f7356f3b91c
Add engine startup messages showing prod name and "TNSP simple demoengine blurb".
Matti Hamalainen <ccr@tnsp.org>
parents:
122
diff
changeset
|
604 "%s\n" |
631
25656351f5f9
Remove the note about TNSP simple demoengine.
Matti Hamalainen <ccr@tnsp.org>
parents:
623
diff
changeset
|
605 "%s\n", |
123
6f7356f3b91c
Add engine startup messages showing prod name and "TNSP simple demoengine blurb".
Matti Hamalainen <ccr@tnsp.org>
parents:
122
diff
changeset
|
606 dmProgDesc, dmProgAuthor); |
125
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
607 |
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
608 dmPrint(0, |
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
609 "Using libSDL, " |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
610 #ifdef DM_USE_PACKFS |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
611 "zlib, " |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
612 #endif |
125
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
613 #ifdef DM_USE_TREMOR |
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
614 "Tremor Vorbis codec" |
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
615 #endif |
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
616 " and modified stb_image.\n" |
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
617 "See README.txt for more information.\n"); |
5102ec9e9bce
Add a blurb about used features/3rd party code (zlib, Tremor, SDL).
Matti Hamalainen <ccr@tnsp.org>
parents:
123
diff
changeset
|
618 |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
619 // Initialize resource subsystem |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
620 dmPrint(1, "Initializing resources subsystem.\n"); |
721
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
621 if ((err = dmResourcesInit(&engine.resources, engine.optPackFilename, |
600 | 622 engine.optDataPath, engine.optResFlags, engineClassifier)) != DMERR_OK) |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
623 { |
574 | 624 dmError("Could not initialize resource manager, #%d: %s.\n", err, dmErrorStr(err)); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
625 goto error_exit; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
626 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
627 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
628 // Initialize SDL components |
122
5ba672ebe014
Add some verbose engine startup messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
121
diff
changeset
|
629 dmPrint(1, "Initializing libSDL.\n"); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
630 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) != 0) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
631 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
632 dmError("Could not initialize SDL: %s\n", SDL_GetError()); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
633 goto error_exit; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
634 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
635 initSDL = TRUE; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
636 |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
637 |
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
638 // Present video mode selector |
593 | 639 if (engine.optVidAspect <= 0) |
640 engine.optVidAspect = engineGetVideoAspect(engine.optVidWidth, engine.optVidHeight); | |
641 | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
642 if (engine.optVidSetup) |
593 | 643 { |
644 if ((err = engineVideoSetup()) <= 0) | |
645 goto error_exit; | |
646 } | |
578
cf5d44b36851
Add some initial code for video setup screen.
Matti Hamalainen <ccr@tnsp.org>
parents:
574
diff
changeset
|
647 |
122
5ba672ebe014
Add some verbose engine startup messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
121
diff
changeset
|
648 // Initialize audio parts |
126
97488948215c
Allow setting audio format settings.
Matti Hamalainen <ccr@tnsp.org>
parents:
125
diff
changeset
|
649 if (engine.optAfmt.freq == 0 && engine.optAfmt.channels == 0) |
97488948215c
Allow setting audio format settings.
Matti Hamalainen <ccr@tnsp.org>
parents:
125
diff
changeset
|
650 { |
97488948215c
Allow setting audio format settings.
Matti Hamalainen <ccr@tnsp.org>
parents:
125
diff
changeset
|
651 engine.optAfmt.freq = 44100; |
97488948215c
Allow setting audio format settings.
Matti Hamalainen <ccr@tnsp.org>
parents:
125
diff
changeset
|
652 engine.optAfmt.format = AUDIO_S16SYS; |
97488948215c
Allow setting audio format settings.
Matti Hamalainen <ccr@tnsp.org>
parents:
125
diff
changeset
|
653 engine.optAfmt.channels = 2; |
97488948215c
Allow setting audio format settings.
Matti Hamalainen <ccr@tnsp.org>
parents:
125
diff
changeset
|
654 } |
640
55743025d628
Change audio default setup.
Matti Hamalainen <ccr@tnsp.org>
parents:
635
diff
changeset
|
655 |
55743025d628
Change audio default setup.
Matti Hamalainen <ccr@tnsp.org>
parents:
635
diff
changeset
|
656 if (engine.optAfmt.samples == 0) |
55743025d628
Change audio default setup.
Matti Hamalainen <ccr@tnsp.org>
parents:
635
diff
changeset
|
657 engine.optAfmt.samples = engine.optAfmt.freq / 16; |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
658 |
641
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
659 switch (engine.optAudioSetup) |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
660 { |
641
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
661 case DM_ASETUP_JSS: |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
662 #ifdef DM_USE_JSS |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
663 jssInit(); |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
664 |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
665 switch (engine.optAfmt.format) |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
666 { |
754 | 667 case AUDIO_S16SYS: engine.jssFormat = JSS_AUDIO_S16; break; |
668 case AUDIO_U16SYS: engine.jssFormat = JSS_AUDIO_U16; break; | |
669 case AUDIO_S8: engine.jssFormat = JSS_AUDIO_S8; break; | |
670 case AUDIO_U8: engine.jssFormat = JSS_AUDIO_U8; break; | |
641
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
671 } |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
672 |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
673 dmPrint(1, "Initializing miniJSS mixer with fmt=%d, chn=%d, freq=%d\n", |
754 | 674 engine.jssFormat, engine.optAfmt.channels, engine.optAfmt.freq); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
675 |
754 | 676 if ((engine.jssDev = jvmInit(engine.jssFormat, engine.optAfmt.channels, engine.optAfmt.freq, JMIX_AUTO)) == NULL) |
641
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
677 { |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
678 dmError("jvmInit() returned NULL, voi perkele.\n"); |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
679 goto error_exit; |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
680 } |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
681 |
754 | 682 if ((engine.jssPlr = jmpInit(engine.jssDev)) == NULL) |
641
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
683 { |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
684 dmError("jmpInit() returned NULL\n"); |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
685 goto error_exit; |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
686 } |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
687 #else |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
688 dmError("miniJSS support not included.\n"); |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
689 #endif |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
690 break; |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
691 |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
692 case DM_ASETUP_TREMOR: |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
693 #ifndef DM_USE_TREMOR |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
694 dmError("Tremor support not included.\n"); |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
695 #endif |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
696 break; |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
697 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
698 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
699 // Initialize SDL audio |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
700 dmPrint(1, "Trying to init SDL audio with: fmt=%d, chn=%d, freq=%d\n", |
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
701 engine.optAfmt.format, engine.optAfmt.channels, engine.optAfmt.freq); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
702 |
342
c6ec970dc3cf
Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
336
diff
changeset
|
703 engine.optAfmt.callback = engineAudioCallback; |
755
614df17de975
Add mutex locking to audio stream stuff.
Matti Hamalainen <ccr@tnsp.org>
parents:
754
diff
changeset
|
704 engine.audioStreamMutex = dmCreateMutex(); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
705 |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
706 if (SDL_OpenAudio(&engine.optAfmt, NULL) < 0) |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
707 { |
122
5ba672ebe014
Add some verbose engine startup messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
121
diff
changeset
|
708 dmError("Couldn't open SDL audio: %s\n", SDL_GetError()); |
595
695a623eed63
Add a comment about no-sound support to the relevant part in audio setup
Matti Hamalainen <ccr@tnsp.org>
parents:
593
diff
changeset
|
709 // We'll let this pass, as we want to support no-sound. |
695a623eed63
Add a comment about no-sound support to the relevant part in audio setup
Matti Hamalainen <ccr@tnsp.org>
parents:
593
diff
changeset
|
710 // goto error_exit; |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
711 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
712 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
713 // Initialize SDL video |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
714 if (engine.demoInitPreVideo != NULL && |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
715 (err = engine.demoInitPreVideo(&engine)) != DMERR_OK) |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
716 { |
574 | 717 dmError("demoInitPreVideo() failed, #%d: %s\n", err, dmErrorStr(err)); |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
718 goto error_exit; |
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
719 } |
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
720 |
332
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
721 if (!engineInitializeVideo()) |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
722 goto error_exit; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
723 |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
724 if (engine.demoInitPostVideo != NULL && |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
725 (err = engine.demoInitPostVideo(&engine)) != DMERR_OK) |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
726 { |
574 | 727 dmError("demoInitPostVideo() failed, #%d: %s\n", err, dmErrorStr(err)); |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
728 goto error_exit; |
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
729 } |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
730 |
593 | 731 // Hide cursor |
732 SDL_ShowCursor(SDL_DISABLE); | |
733 | |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
734 // Load resources |
122
5ba672ebe014
Add some verbose engine startup messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
121
diff
changeset
|
735 dmPrint(1, "Loading resources, please wait...\n"); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
736 if ((err = engineLoadResources()) != DMERR_OK) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
737 { |
574 | 738 dmError("Error loading resources, #%d: %s.\n", |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
739 err, dmErrorStr(err)); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
740 goto error_exit; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
741 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
742 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
743 // Final initializations |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
744 if ((err = engine.demoInit(&engine)) != DMERR_OK) |
354 | 745 { |
574 | 746 dmError("Failure in demoInit(), #%d: %s\n", |
354 | 747 err, dmErrorStr(err)); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
748 goto error_exit; |
354 | 749 } |
750 | |
751 // Initialize effects | |
369 | 752 if ((err = engineInitializeEffects(&engine)) != DMERR_OK) |
354 | 753 { |
574 | 754 dmError("Effects initialization failed, #%d: %s\n", |
354 | 755 err, dmErrorStr(err)); |
756 goto error_exit; | |
757 } | |
758 | |
759 // Use a timeline, if set | |
573
14640d0688d3
Make timeline stuff optional.
Matti Hamalainen <ccr@tnsp.org>
parents:
571
diff
changeset
|
760 #ifdef DM_USE_TIMELINE |
354 | 761 if (engine.timeline != NULL) |
762 { | |
763 if ((err = dmLoadTimeline(engine.timeline, &engine.tl)) != DMERR_OK) | |
764 { | |
574 | 765 dmError("Error loading timeline, #%d: %s\n", err, |
354 | 766 dmErrorStr(err)); |
767 goto error_exit; | |
768 } | |
769 | |
770 if ((err = dmPrepareTimeline(engine.tl, engine.ptl)) != DMERR_OK) | |
771 { | |
574 | 772 dmError("Error creating prepared timeline, #%d: %s\n", |
354 | 773 err, dmErrorStr(err)); |
774 goto error_exit; | |
775 } | |
776 } | |
573
14640d0688d3
Make timeline stuff optional.
Matti Hamalainen <ccr@tnsp.org>
parents:
571
diff
changeset
|
777 #endif |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
778 |
122
5ba672ebe014
Add some verbose engine startup messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
121
diff
changeset
|
779 dmPrint(1, "Starting up.\n"); |
278 | 780 |
781 SDL_LockAudio(); | |
41
780300a8d322
Move SDL_PauseAudio(0) to the "engine" instead of the demo code.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
782 SDL_PauseAudio(0); |
278 | 783 SDL_UnlockAudio(); |
784 | |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
785 engine.startTime = SDL_GetTicks(); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
786 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
787 while (!engine.exitFlag) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
788 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
789 while (SDL_PollEvent(&engine.event)) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
790 switch (engine.event.type) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
791 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
792 case SDL_KEYDOWN: |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
793 switch (engine.event.key.keysym.sym) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
794 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
795 case SDLK_ESCAPE: |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
796 engine.exitFlag = TRUE; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
797 break; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
798 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
799 case SDLK_SPACE: |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
800 engine.pauseFlag = !engine.pauseFlag; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
801 break; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
802 |
336
13dba73cf28e
Add 'F' key to fullscreen toggling, in addition to alt+enter.
Matti Hamalainen <ccr@tnsp.org>
parents:
335
diff
changeset
|
803 case SDLK_f: |
13dba73cf28e
Add 'F' key to fullscreen toggling, in addition to alt+enter.
Matti Hamalainen <ccr@tnsp.org>
parents:
335
diff
changeset
|
804 engine.optVFlags ^= SDL_FULLSCREEN; |
13dba73cf28e
Add 'F' key to fullscreen toggling, in addition to alt+enter.
Matti Hamalainen <ccr@tnsp.org>
parents:
335
diff
changeset
|
805 if (!engineInitializeVideo()) |
13dba73cf28e
Add 'F' key to fullscreen toggling, in addition to alt+enter.
Matti Hamalainen <ccr@tnsp.org>
parents:
335
diff
changeset
|
806 goto error_exit; |
13dba73cf28e
Add 'F' key to fullscreen toggling, in addition to alt+enter.
Matti Hamalainen <ccr@tnsp.org>
parents:
335
diff
changeset
|
807 break; |
13dba73cf28e
Add 'F' key to fullscreen toggling, in addition to alt+enter.
Matti Hamalainen <ccr@tnsp.org>
parents:
335
diff
changeset
|
808 |
109
3de6301dcfe1
Implement fullscrene toggling via alt+enter
Matti Hamalainen <ccr@tnsp.org>
parents:
105
diff
changeset
|
809 case SDLK_RETURN: |
3de6301dcfe1
Implement fullscrene toggling via alt+enter
Matti Hamalainen <ccr@tnsp.org>
parents:
105
diff
changeset
|
810 if (engine.event.key.keysym.mod & KMOD_ALT) |
3de6301dcfe1
Implement fullscrene toggling via alt+enter
Matti Hamalainen <ccr@tnsp.org>
parents:
105
diff
changeset
|
811 { |
332
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
812 engine.optVFlags ^= SDL_FULLSCREEN; |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
813 if (!engineInitializeVideo()) |
d4802335cbbc
Clean up video (re)initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
316
diff
changeset
|
814 goto error_exit; |
109
3de6301dcfe1
Implement fullscrene toggling via alt+enter
Matti Hamalainen <ccr@tnsp.org>
parents:
105
diff
changeset
|
815 } |
3de6301dcfe1
Implement fullscrene toggling via alt+enter
Matti Hamalainen <ccr@tnsp.org>
parents:
105
diff
changeset
|
816 break; |
93
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
817 |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
818 default: |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
819 break; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
820 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
821 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
822 break; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
823 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
824 case SDL_VIDEOEXPOSE: |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
825 break; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
826 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
827 case SDL_QUIT: |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
828 engine.exitFlag = TRUE; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
829 break; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
830 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
831 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
832 // Draw frame |
361 | 833 engine.frameTime = SDL_GetTicks(); |
93
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
834 if (engine.pauseFlag != engine.paused) |
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
835 { |
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
836 engine.paused = engine.pauseFlag; |
367 | 837 engine.pauseTime = engineGetTick(&engine); |
93
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
838 } |
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
839 |
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
840 if (engine.paused) |
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
841 { |
361 | 842 engine.startTime = engine.frameTime - engine.pauseTime; |
93
15fdd5573344
Add simple (and buggy / not really working) debug mode.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
843 } |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
844 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
845 if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
846 { |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
847 dmError("Can't lock surface.\n"); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
848 goto error_exit; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
849 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
850 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
851 // Call main tick |
345
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
852 if (engine.demoRender != NULL) |
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
853 { |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
854 if ((err = engine.demoRender(&engine)) != DMERR_OK) |
345
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
855 goto error_exit; |
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
856 } |
573
14640d0688d3
Make timeline stuff optional.
Matti Hamalainen <ccr@tnsp.org>
parents:
571
diff
changeset
|
857 #ifdef DM_USE_TIMELINE |
345
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
858 else |
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
859 { |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
860 if ((err = dmExecuteTimeline(engine.ptl, engine.screen, engineGetTick(&engine))) != DMERR_OK) |
345
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
861 goto error_exit; |
cac13f180169
Work towards timeline support.
Matti Hamalainen <ccr@tnsp.org>
parents:
342
diff
changeset
|
862 } |
573
14640d0688d3
Make timeline stuff optional.
Matti Hamalainen <ccr@tnsp.org>
parents:
571
diff
changeset
|
863 #endif |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
864 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
865 // Flip screen |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
866 if (SDL_MUSTLOCK(engine.screen) != 0) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
867 SDL_UnlockSurface(engine.screen); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
868 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
869 SDL_Flip(engine.screen); |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
870 SDL_Delay(engine.paused ? 100 : 20); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
871 |
361 | 872 engine.frameCount++; |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
873 } |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
874 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
875 // Print benchmark results |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
876 engine.endTime = SDL_GetTicks(); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
877 dmPrint(1, "%d frames in %d ms, fps = %1.3f\n", |
361 | 878 engine.frameCount, engine.endTime - engine.startTime, |
879 (float) (engine.frameCount * 1000.0f) / (float) (engine.endTime - engine.startTime)); | |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
880 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
881 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
882 error_exit: |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
883 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
884 dmPrint(1, "Shutting down.\n"); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
885 SDL_ShowCursor(SDL_ENABLE); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
886 |
278 | 887 SDL_LockAudio(); |
888 SDL_PauseAudio(1); | |
105
d5d27f262227
Beging merging of dmsimple2-fork into the main "engine".
Matti Hamalainen <ccr@tnsp.org>
parents:
94
diff
changeset
|
889 #ifdef DM_USE_JSS |
641
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
890 if (engine.optAudioSetup == DM_ASETUP_JSS) |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
891 { |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
892 jmpClose(engine.plr); |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
893 jvmClose(engine.dev); |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
894 jssClose(); |
c3852e49a610
Change how audio configuration works.
Matti Hamalainen <ccr@tnsp.org>
parents:
640
diff
changeset
|
895 } |
278 | 896 #endif |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
897 SDL_UnlockAudio(); |
755
614df17de975
Add mutex locking to audio stream stuff.
Matti Hamalainen <ccr@tnsp.org>
parents:
754
diff
changeset
|
898 |
614df17de975
Add mutex locking to audio stream stuff.
Matti Hamalainen <ccr@tnsp.org>
parents:
754
diff
changeset
|
899 if (engine.audioStreamMutex != NULL) |
614df17de975
Add mutex locking to audio stream stuff.
Matti Hamalainen <ccr@tnsp.org>
parents:
754
diff
changeset
|
900 dmDestroyMutex(engine.audioStreamMutex); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
901 |
573
14640d0688d3
Make timeline stuff optional.
Matti Hamalainen <ccr@tnsp.org>
parents:
571
diff
changeset
|
902 #ifdef DM_USE_TIMELINE |
354 | 903 dmFreeTimeline(engine.tl); |
904 dmFreePreparedTimelineData(engine.ptl); | |
573
14640d0688d3
Make timeline stuff optional.
Matti Hamalainen <ccr@tnsp.org>
parents:
571
diff
changeset
|
905 #endif |
14640d0688d3
Make timeline stuff optional.
Matti Hamalainen <ccr@tnsp.org>
parents:
571
diff
changeset
|
906 |
369 | 907 engineShutdownEffects(&engine); |
721
bb14d7907eb2
Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
642
diff
changeset
|
908 dmResourcesClose(engine.resources); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
909 |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
910 if (engine.demoShutdown != NULL) |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
911 engine.demoShutdown(&engine); |
94
4bbfc0274b29
Change some function names, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
93
diff
changeset
|
912 |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
913 if (initSDL) |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
914 SDL_Quit(); |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
915 |
127
ab4086db7dad
Various improvements in modularity.
Matti Hamalainen <ccr@tnsp.org>
parents:
126
diff
changeset
|
916 if (engine.demoQuit != NULL) |
366
38e10b5f4e09
Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents:
361
diff
changeset
|
917 engine.demoQuit(&engine); |
32
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
918 |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
919 return 0; |
d1a6833a5d67
Added a simple demo engine core.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
920 } |