Mercurial > hg > dmlib
comparison tests/blittest.c @ 2586:9807ae37ad69
Require stdbool.h, we require C11 now.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 08 Dec 2022 15:59:22 +0200 |
parents | b7cd5dd0b82e |
children |
comparison
equal
deleted
inserted
replaced
2585:ef6c826c5b7a | 2586:9807ae37ad69 |
---|---|
6 #include <math.h> | 6 #include <math.h> |
7 | 7 |
8 #define DM_COLORS (256) | 8 #define DM_COLORS (256) |
9 | 9 |
10 char *optFontFile = "font.ttf"; | 10 char *optFontFile = "font.ttf"; |
11 BOOL optBenchmark = FALSE; | 11 bool optBenchmark = false; |
12 int optVFlags = SDL_SWSURFACE | SDL_HWPALETTE; | 12 int optVFlags = SDL_SWSURFACE | SDL_HWPALETTE; |
13 int optScrWidth = 640, optScrHeight = 480, optFontSize = 20, optScrDepth = 32; | 13 int optScrWidth = 640, optScrHeight = 480, optFontSize = 20, optScrDepth = 32; |
14 int optBenchmarkLen = 20; | 14 int optBenchmarkLen = 20; |
15 DMPerlinContext perlinCtx; | 15 DMPerlinContext perlinCtx; |
16 | 16 |
31 { | 31 { |
32 dmArgsPrintHelp(stdout, optList, optListN, 0, 80 - 2); | 32 dmArgsPrintHelp(stdout, optList, optListN, 0, 80 - 2); |
33 } | 33 } |
34 | 34 |
35 | 35 |
36 BOOL argHandleOpt(const int optN, char *optArg, char *currArg) | 36 bool argHandleOpt(const int optN, char *optArg, char *currArg) |
37 { | 37 { |
38 switch (optN) { | 38 switch (optN) { |
39 case 0: | 39 case 0: |
40 argShowHelp(); | 40 argShowHelp(); |
41 exit(0); | 41 exit(0); |
60 if (sscanf(optArg, "%dx%d", &w, &h) == 2) | 60 if (sscanf(optArg, "%dx%d", &w, &h) == 2) |
61 { | 61 { |
62 if (w < 320 || h < 200 || w > 3200 || h > 3200) | 62 if (w < 320 || h < 200 || w > 3200 || h > 3200) |
63 { | 63 { |
64 dmErrorMsg("Invalid width or height: %d x %d\n", w, h); | 64 dmErrorMsg("Invalid width or height: %d x %d\n", w, h); |
65 return FALSE; | 65 return false; |
66 } | 66 } |
67 optScrWidth = w; | 67 optScrWidth = w; |
68 optScrHeight = h; | 68 optScrHeight = h; |
69 } | 69 } |
70 else | 70 else |
71 { | 71 { |
72 dmErrorMsg("Invalid size argument '%s'.\n", optArg); | 72 dmErrorMsg("Invalid size argument '%s'.\n", optArg); |
73 return FALSE; | 73 return false; |
74 } | 74 } |
75 } | 75 } |
76 break; | 76 break; |
77 | 77 |
78 case 7: | 78 case 7: |
79 optBenchmark = TRUE; | 79 optBenchmark = true; |
80 break; | 80 break; |
81 | 81 |
82 default: | 82 default: |
83 dmErrorMsg("Unknown option '%s'.\n", currArg); | 83 dmErrorMsg("Unknown option '%s'.\n", currArg); |
84 return FALSE; | 84 return false; |
85 } | 85 } |
86 | 86 |
87 return TRUE; | 87 return true; |
88 } | 88 } |
89 | 89 |
90 | 90 |
91 void DM_MakePalette(SDL_Surface *scr) | 91 void DM_MakePalette(SDL_Surface *scr) |
92 { | 92 { |
108 { | 108 { |
109 fprintf(f, "SDL_Rect <%d, %d : %d, %d>\n", | 109 fprintf(f, "SDL_Rect <%d, %d : %d, %d>\n", |
110 r->x, r->y, r->w, r->h); | 110 r->x, r->y, r->w, r->h); |
111 } | 111 } |
112 | 112 |
113 BOOL DM_InitializeVideo(SDL_Surface **screen) | 113 bool DM_InitializeVideo(SDL_Surface **screen) |
114 { | 114 { |
115 *screen = SDL_SetVideoMode(optScrWidth, optScrHeight, optScrDepth, optVFlags | SDL_RESIZABLE); | 115 *screen = SDL_SetVideoMode(optScrWidth, optScrHeight, optScrDepth, optVFlags | SDL_RESIZABLE); |
116 if (*screen == NULL) | 116 if (*screen == NULL) |
117 { | 117 { |
118 dmErrorMsg("Can't SDL_SetVideoMode(): %s\n", SDL_GetError()); | 118 dmErrorMsg("Can't SDL_SetVideoMode(): %s\n", SDL_GetError()); |
119 return FALSE; | 119 return false; |
120 } | 120 } |
121 | 121 |
122 #if 0 | 122 #if 0 |
123 SDL_Rect r; | 123 SDL_Rect r; |
124 r.x = -50; | 124 r.x = -50; |
129 SDL_SetClipRect(*screen, &r); | 129 SDL_SetClipRect(*screen, &r); |
130 DM_PrintRect(stderr, &r); | 130 DM_PrintRect(stderr, &r); |
131 DM_PrintRect(stderr, &((*screen)->clip_rect)); | 131 DM_PrintRect(stderr, &((*screen)->clip_rect)); |
132 #endif | 132 #endif |
133 | 133 |
134 return TRUE; | 134 return true; |
135 } | 135 } |
136 | 136 |
137 void DM_Random(SDL_Surface *screen, int q) | 137 void DM_Random(SDL_Surface *screen, int q) |
138 { | 138 { |
139 Uint8 *pix = screen->pixels; | 139 Uint8 *pix = screen->pixels; |
182 for (i = 0; i < QWIDTH; i++) | 182 for (i = 0; i < QWIDTH; i++) |
183 { | 183 { |
184 DMVector vr, vl, va; | 184 DMVector vr, vl, va; |
185 DMFloat vrayLen, vfactor; | 185 DMFloat vrayLen, vfactor; |
186 int vlen; | 186 int vlen; |
187 BOOL wasHit; | 187 bool wasHit; |
188 | 188 |
189 // Perform shadow occlusion via simplistic raytracing | 189 // Perform shadow occlusion via simplistic raytracing |
190 vr.x = i; | 190 vr.x = i; |
191 vr.y = j; | 191 vr.y = j; |
192 vr.z = light->z; // - 10.0; | 192 vr.z = light->z; // - 10.0; |
201 dm_vector_normalize(&va); | 201 dm_vector_normalize(&va); |
202 dm_vector_scale(&va, 0.6f); | 202 dm_vector_scale(&va, 0.6f); |
203 dm_vector_copy(&vr, light); | 203 dm_vector_copy(&vr, light); |
204 | 204 |
205 vlen = 0; | 205 vlen = 0; |
206 wasHit = FALSE; | 206 wasHit = false; |
207 do | 207 do |
208 { | 208 { |
209 float h; | 209 float h; |
210 | 210 |
211 // If ray is inside the heightmap, get value | 211 // If ray is inside the heightmap, get value |
214 else | 214 else |
215 break; | 215 break; |
216 | 216 |
217 // Check for hits | 217 // Check for hits |
218 if (h > vr.z) | 218 if (h > vr.z) |
219 wasHit = TRUE; | 219 wasHit = true; |
220 else | 220 else |
221 { | 221 { |
222 // Move forwards | 222 // Move forwards |
223 dm_vector_add(&vr, &va); | 223 dm_vector_add(&vr, &va); |
224 vlen++; | 224 vlen++; |
284 SDL_Surface *screen = NULL, *bmap = NULL; | 284 SDL_Surface *screen = NULL, *bmap = NULL; |
285 TTF_Font *font = NULL; | 285 TTF_Font *font = NULL; |
286 SDL_Color fontcol={255,155,155,0}; | 286 SDL_Color fontcol={255,155,155,0}; |
287 SDL_Event event; | 287 SDL_Event event; |
288 int mouseX, mouseY; | 288 int mouseX, mouseY; |
289 BOOL initSDL = FALSE, initTTF = FALSE, exitFlag, showMap = FALSE; | 289 bool initSDL = false, initTTF = false, exitFlag, showMap = false; |
290 | 290 |
291 dmInitProg("blittest", "dmlib blittest", "0.2", NULL, NULL); | 291 dmInitProg("blittest", "dmlib blittest", "0.2", NULL, NULL); |
292 if (!dmArgsProcess(argc, argv, optList, optListN, | 292 if (!dmArgsProcess(argc, argv, optList, optListN, |
293 argHandleOpt, NULL, OPTH_BAILOUT)) | 293 argHandleOpt, NULL, OPTH_BAILOUT)) |
294 exit(1); | 294 exit(1); |
296 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0) | 296 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0) |
297 { | 297 { |
298 dmErrorMsg("Could not initialize SDL: %s\n", SDL_GetError()); | 298 dmErrorMsg("Could not initialize SDL: %s\n", SDL_GetError()); |
299 goto error_exit; | 299 goto error_exit; |
300 } | 300 } |
301 initSDL = TRUE; | 301 initSDL = true; |
302 | 302 |
303 | 303 |
304 if (TTF_Init() < 0) | 304 if (TTF_Init() < 0) |
305 { | 305 { |
306 dmErrorMsg("Could not initialize FreeType/TTF: %s\n", SDL_GetError()); | 306 dmErrorMsg("Could not initialize FreeType/TTF: %s\n", SDL_GetError()); |
307 goto error_exit; | 307 goto error_exit; |
308 } | 308 } |
309 initTTF = TRUE; | 309 initTTF = true; |
310 | 310 |
311 font = TTF_OpenFont(optFontFile, optFontSize); | 311 font = TTF_OpenFont(optFontFile, optFontSize); |
312 if (font == NULL) | 312 if (font == NULL) |
313 { | 313 { |
314 dmErrorMsg("Could not load TTF font '%s' (%d): %s\n", | 314 dmErrorMsg("Could not load TTF font '%s' (%d): %s\n", |
349 dmMakeBumpMap(heightMap, 0.06, 254); | 349 dmMakeBumpMap(heightMap, 0.06, 254); |
350 | 350 |
351 | 351 |
352 | 352 |
353 int numFrames = 0, startTime = SDL_GetTicks(), endTime = 0; | 353 int numFrames = 0, startTime = SDL_GetTicks(), endTime = 0; |
354 exitFlag = FALSE; | 354 exitFlag = false; |
355 | 355 |
356 if (optBenchmark) | 356 if (optBenchmark) |
357 dmMsg(0, "Starting benchmark, running for %d seconds.\n", optBenchmarkLen); | 357 dmMsg(0, "Starting benchmark, running for %d seconds.\n", optBenchmarkLen); |
358 | 358 |
359 while (!exitFlag) | 359 while (!exitFlag) |
365 switch (event.type) | 365 switch (event.type) |
366 { | 366 { |
367 case SDL_KEYDOWN: | 367 case SDL_KEYDOWN: |
368 switch (event.key.keysym.sym) | 368 switch (event.key.keysym.sym) |
369 { | 369 { |
370 case SDLK_ESCAPE: exitFlag = TRUE; break; | 370 case SDLK_ESCAPE: exitFlag = true; break; |
371 | 371 |
372 case SDLK_F5: | 372 case SDLK_F5: |
373 showMap = !showMap; | 373 showMap = !showMap; |
374 break; | 374 break; |
375 | 375 |
430 numFrames++; | 430 numFrames++; |
431 | 431 |
432 if (optBenchmark) | 432 if (optBenchmark) |
433 { | 433 { |
434 if (endTime - startTime > optBenchmarkLen * 1000) | 434 if (endTime - startTime > optBenchmarkLen * 1000) |
435 exitFlag = TRUE; | 435 exitFlag = true; |
436 } | 436 } |
437 } | 437 } |
438 | 438 |
439 // Print benchmark results | 439 // Print benchmark results |
440 dmMsg(0, "%d frames in %d ms, fps = %1.3f\n", | 440 dmMsg(0, "%d frames in %d ms, fps = %1.3f\n", |