Mercurial > hg > forks > gldragon
comparison gldragon.cpp @ 97:05677852afd5
Improve manual mode.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 25 May 2021 02:57:04 +0300 |
parents | 59195e95c080 |
children | 44e3656f4c83 |
comparison
equal
deleted
inserted
replaced
96:50a69d327b4f | 97:05677852afd5 |
---|---|
15 | 15 |
16 /* Default settings etc. constants | 16 /* Default settings etc. constants |
17 */ | 17 */ |
18 #define SET_DEF_WIDTH 1280 | 18 #define SET_DEF_WIDTH 1280 |
19 #define SET_DEF_HEIGHT 960 | 19 #define SET_DEF_HEIGHT 960 |
20 #define SET_FRAMES (180) | 20 #define SET_FRAMES (360) |
21 #define SET_MAX_SHADER_SIZE (128 * 1024) | 21 #define SET_MAX_SHADER_SIZE (128 * 1024) |
22 | 22 |
23 | 23 |
24 /* Helpers | 24 /* Helpers |
25 */ | 25 */ |
98 | 98 |
99 bool | 99 bool |
100 exitFlag = false, | 100 exitFlag = false, |
101 pauseFlag = false, | 101 pauseFlag = false, |
102 manualFlag = false, | 102 manualFlag = false, |
103 manualChanged = false, | |
103 optShowHelp = false, | 104 optShowHelp = false, |
104 optSetInputFilename = false, | 105 optSetInputFilename = false, |
105 optUseShaders = false; | 106 optUseShaders = false; |
106 | 107 |
107 int optWidth = SET_DEF_WIDTH, | 108 int optWidth = SET_DEF_WIDTH, |
342 case SDLK_q: | 343 case SDLK_q: |
343 exitFlag = true; | 344 exitFlag = true; |
344 break; | 345 break; |
345 | 346 |
346 case SDLK_RIGHT: | 347 case SDLK_RIGHT: |
347 manualFlag = true; | 348 manualChanged = manualFlag = true; |
348 cycleFrames++; | 349 if (++cycleFrames >= SET_FRAMES) |
350 cycleFrames = 0; | |
349 break; | 351 break; |
350 | 352 |
351 case SDLK_LEFT: | 353 case SDLK_LEFT: |
352 manualFlag = true; | 354 manualChanged = manualFlag = true; |
353 cycleFrames--; | 355 if (--cycleFrames < 0) |
356 cycleFrames = SET_FRAMES - 1; | |
354 break; | 357 break; |
355 } | 358 } |
356 } | 359 } |
357 | 360 |
358 // Render the frame | 361 // Render the frame |
359 frameStart = SDL_GetTicks(); | 362 frameStart = SDL_GetTicks(); |
360 renderer.drawScene(scene, fmodf((float) cycleFrames, SET_FRAMES) / SET_FRAMES); | 363 renderer.drawScene(scene, (float) cycleFrames / (float) SET_FRAMES); |
361 renderer.swapWindow(); | 364 renderer.swapWindow(); |
362 frameEnd = SDL_GetTicks(); | 365 frameEnd = SDL_GetTicks(); |
363 | 366 |
364 // Check for errors | 367 // Check for errors |
365 renderer.checkErrors(); | 368 renderer.checkErrors(); |
366 | 369 |
367 frameDelta = frameEnd - frameStart; | 370 frameDelta = frameEnd - frameStart; |
368 | 371 |
369 // Handle automatic mode | 372 if (manualFlag) |
370 if (!pauseFlag && !manualFlag) | 373 { |
371 { | 374 // Handle manual control mode |
375 if (manualChanged) | |
376 { | |
377 printf("%d ms frametime, frame #%d\n", | |
378 frameDelta, cycleFrames); | |
379 manualChanged = false; | |
380 } | |
381 | |
382 SDL_Delay(25); | |
383 } | |
384 else | |
385 if (!pauseFlag) | |
386 { | |
387 // Handle automatic mode | |
372 totalFrames++; | 388 totalFrames++; |
373 cycleFrames++; | 389 cycleFrames++; |
374 | 390 |
375 cycleTime += frameDelta; | 391 cycleTime += frameDelta; |
376 totalTime += frameDelta; | 392 totalTime += frameDelta; |
405 cycleTime = 0; | 421 cycleTime = 0; |
406 } | 422 } |
407 } | 423 } |
408 else | 424 else |
409 { | 425 { |
410 SDL_Delay(manualFlag ? 25 : 100); | 426 SDL_Delay(100); |
411 } | 427 } |
412 } | 428 } |
413 | 429 |
414 // Show totals | 430 // Show totals |
415 printf("%d ms total for %d total frames = %.2lf FPS average\n", | 431 printf("%d ms total for %d total frames = %.2lf FPS average\n", |