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",