Mercurial > hg > dmlib
changeset 176:dfe7e392ea7e
Optimize screen updates.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 06 Oct 2012 11:14:51 +0300 |
parents | 4192aa6d5af6 |
children | eb293aa7a671 |
files | ppl.c |
diffstat | 1 files changed, 32 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/ppl.c Sat Oct 06 11:11:41 2012 +0300 +++ b/ppl.c Sat Oct 06 11:14:51 2012 +0300 @@ -671,6 +671,9 @@ while (!engine.exitFlag && engine.plr->isPlaying) { + currTick = SDL_GetTicks(); + BOOL force = (currTick - prevTick > 500); + while (SDL_PollEvent(&engine.event)) switch (engine.event.type) { @@ -688,16 +691,23 @@ case SDLK_LEFT: if (engine.actChannel > 0) + { engine.actChannel--; + force = TRUE; + } break; case SDLK_RIGHT: if (engine.actChannel < engine.mod->nchannels) + { engine.actChannel++; + force = TRUE; + } break; case SDLK_RETURN: jvmMute(engine.dev, engine.actChannel, !jvmGetMute(engine.dev, engine.actChannel)); + force = TRUE; break; case SDLK_PAGEUP: @@ -706,6 +716,7 @@ jmpPlayOrder(engine.plr, dmClamp(engine.plr->order - 1, 0, engine.mod->norders)); JSS_UNLOCK(engine.plr); JSS_UNLOCK(engine.dev); + force = TRUE; break; case SDLK_PAGEDOWN: @@ -714,6 +725,7 @@ jmpPlayOrder(engine.plr, dmClamp(engine.plr->order + 1, 0, engine.mod->norders)); JSS_UNLOCK(engine.plr); JSS_UNLOCK(engine.dev); + force = TRUE; break; default: @@ -746,9 +758,9 @@ goto error_exit; } - currTick = SDL_GetTicks(); #if 1 - if (engine.plr->row != prevRow || currTick - prevTick > 100) + + if (engine.plr->row != prevRow || force) { dmClearSurface(engine.screen, col.boxBg); @@ -762,29 +774,33 @@ engine.screen->w - 6, engine.screen->h * 0.8, engine.plr->pattern, engine.plr->row); - prevTick = currTick; prevRow = engine.plr->row; + force = TRUE; } - else + + if (force) { dmFillRect(engine.screen, 5, 5 + 12, engine.screen->w, 5 + 12 + 10, col.boxBg); - } - - dmDrawBMTextQ(engine.screen, font, DMD_TRANSPARENT, 5, 5 + 12, + dmDrawBMTextQ(engine.screen, font, DMD_TRANSPARENT, 5, 5 + 12, "Tempo: %3d | Speed: %3d | Row: %3d | Order: %3d/%3d | Pattern: %3d/%3d", engine.plr->tempo, engine.plr->speed, engine.plr->row, engine.plr->order, engine.mod->norders, engine.plr->npattern, engine.mod->npatterns); - - + } - JSS_LOCK(engine.dev); - JSS_LOCK(engine.plr); - dmDisplayChannels(engine.screen, 5, engine.screen->h * 0.8 + 5, - engine.screen->w - 5, engine.screen->h - 5, engine.dev); + if (force || currTick - prevTick >= (engine.pauseFlag ? 100 : 20)) + { + JSS_LOCK(engine.dev); + JSS_LOCK(engine.plr); + dmDisplayChannels(engine.screen, 5, engine.screen->h * 0.8 + 5, + engine.screen->w - 5, engine.screen->h - 5, engine.dev); - JSS_UNLOCK(engine.plr); - JSS_UNLOCK(engine.dev); + JSS_UNLOCK(engine.plr); + JSS_UNLOCK(engine.dev); + } + + if (force) + prevTick = currTick; #endif @@ -793,7 +809,7 @@ SDL_UnlockSurface(engine.screen); SDL_Flip(engine.screen); - SDL_Delay(engine.pauseFlag ? 100 : 10); + SDL_Delay(engine.pauseFlag ? 100 : 20); } error_exit: