changeset 296:6d62918739c6

Improve screen update logic.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 11 Oct 2012 16:41:33 +0300
parents 04c7e7cefddc
children a991e4f0acfe
files ppl.c
diffstat 1 files changed, 20 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/ppl.c	Thu Oct 11 16:04:12 2012 +0300
+++ b/ppl.c	Thu Oct 11 16:41:33 2012 +0300
@@ -733,7 +733,7 @@
     while (!engine.exitFlag)
     {
         currTick = SDL_GetTicks();
-        BOOL force = (currTick - prevTick > 500);
+        BOOL force = (currTick - prevTick > 500), updated = FALSE;
 
         while (SDL_PollEvent(&engine.event))
         switch (engine.event.type)
@@ -832,12 +832,6 @@
                 break;
         }
 
-        // Draw frame
-        if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0)
-        {
-            dmError("Can't lock surface.\n");
-            goto error_exit;
-        }
 
 #if 1
         JSS_LOCK(engine.plr);
@@ -849,6 +843,19 @@
         
         if (currRow != prevRow || force)
         {
+            prevRow = currRow;
+            force = TRUE;
+        }
+        
+        // Draw frame
+        if (SDL_MUSTLOCK(engine.screen) != 0 && SDL_LockSurface(engine.screen) != 0)
+        {
+            dmError("Can't lock surface.\n");
+            goto error_exit;
+        }
+
+        if (force)
+        {
             dmClearSurface(engine.screen, col.boxBg);
             
             dmDrawBMTextQ(engine.screen, font, DMD_TRANSPARENT, 5, 5, "%s v%s by ccr/TNSP - (c) Copyright 2012 TNSP", dmProgDesc, dmProgVersion);
@@ -861,13 +868,6 @@
                 engine.screen->w - 6, engine.screen->h * 0.8,
                 currPattern, currRow);
             
-            prevRow = currRow;
-            force = TRUE;
-        }
-        
-        if (force)
-        {
-            dmFillRect(engine.screen, 5, 5 + 12, engine.screen->w, 5 + 12 + 10, col.boxBg);
             JSS_LOCK(engine.plr);
             dmDrawBMTextQ(engine.screen, font, DMD_TRANSPARENT, 5, 5 + 12,
             "Tempo: %3d | Speed: %3d | Row: %3d/%-3d | Order: %3d/%-3d | Pattern: %3d/%-3d",
@@ -876,6 +876,7 @@
             engine.plr->order, engine.mod->norders,
             engine.plr->npattern, engine.mod->npatterns);
             JSS_UNLOCK(engine.plr);
+            updated = TRUE;
         }
 
         if (force || currTick - prevTick >= (engine.pauseFlag ? 100 : 20))
@@ -884,19 +885,21 @@
             dmDisplayChannels(engine.screen, 5, engine.screen->h * 0.8 + 5,
                 engine.screen->w - 5, engine.screen->h - 5, engine.dev);
             JSS_UNLOCK(engine.dev);
+            updated = TRUE;
         }
 
         if (force)
             prevTick = currTick;
 
 #endif
-
         // Flip screen
         if (SDL_MUSTLOCK(engine.screen) != 0)
             SDL_UnlockSurface(engine.screen);
 
-        SDL_Flip(engine.screen);
-        SDL_Delay(engine.pauseFlag ? 100 : 20);
+        if (updated)
+            SDL_Flip(engine.screen);
+
+        SDL_Delay(engine.pauseFlag ? 100 : 30);
     }
 
 error_exit: