changed redraw system to prevent unneeded screen updates
authorHolger Schemel <info@artsoft.org>
Sun, 17 May 2015 11:25:58 +0000 (13:25 +0200)
committerHolger Schemel <info@artsoft.org>
Sun, 17 May 2015 11:25:58 +0000 (13:25 +0200)
src/game.c
src/game.h
src/game_em/input.c
src/game_sp/main.c
src/tools.c
src/tools.h

index 59f98fdb7c479db542c9df7d7933c791a52914e3..49908daaae39c7970777a519d49da601eb039ae1 100644 (file)
@@ -11191,8 +11191,10 @@ void GameActions()
   }
   else
   {
-    GameActions_RND();
+    GameActions_RND_Main();
   }
+
+  redraw_mask |= REDRAW_FIELD;
 }
 
 void GameActions_EM_Main()
@@ -11227,6 +11229,13 @@ void GameActions_SP_Main()
   AdvanceFrameAndPlayerCounters(-1);   /* advance counters for all players */
 }
 
+void GameActions_RND_Main()
+{
+  GameActions_RND();
+
+  BlitScreenToBitmap_RND(backbuffer);
+}
+
 void GameActions_RND()
 {
   int magic_wall_x = 0, magic_wall_y = 0;
index 3e62cf4d983ece67595577c665f65e67347dafe4..a962abd7ca9afc097b0b13ed7ce721f4f634f2c9 100644 (file)
@@ -354,6 +354,7 @@ void StartGameActions(boolean, boolean, int);
 void GameActions(void);
 void GameActions_EM_Main();
 void GameActions_SP_Main();
+void GameActions_RND_Main();
 void GameActions_RND();
 
 void ScrollLevel(int, int);
index 470975188b35f997624eb5f18519e240a5b45c7a..e314272f5315158d1b6aaca80a3587dcf8cbc37e 100644 (file)
@@ -112,7 +112,6 @@ void GameActions_EM(byte action[MAX_PLAYERS], boolean warp_mode)
   RedrawPlayfield_EM(FALSE);
 
   BlitScreenToBitmap_EM(backbuffer);
-  BackToFront_EM();
 }
 
 /* read input device for players */
index f0b7603e13303df3080e15f951daf849a43c46d2..51d799e7945ae249e6c8334b3ff7143284d6d8b8 100644 (file)
@@ -59,7 +59,7 @@ void RedrawPlayfield_SP(boolean force_redraw)
 
   UpdatePlayfield(force_redraw);
 
-  BlitScreenToBitmap_SP(window);
+  BlitScreenToBitmap_SP(backbuffer);
 }
 
 void UpdateGameDoorValues_SP()
index 1676bc894c6638865dc0457b441edd8fcbdd054a..1dc4f4bcbaffd397ead329690d9c5a27d357d8e4 100644 (file)
@@ -354,7 +354,7 @@ void DrawMaskedBorder(int redraw_mask)
   }
 }
 
-static void BlitScreenToBitmap_RND(Bitmap *target_bitmap)
+void BlitScreenToBitmap_RND(Bitmap *target_bitmap)
 {
   DrawBuffer *buffer = (drawto_field == window ? backbuffer : drawto_field);
   int fx = FX, fy = FY;
@@ -410,23 +410,7 @@ static void BlitScreenToBitmap_RND(Bitmap *target_bitmap)
       fy = 2 * TILEY_VAR - (EVEN(lev_fieldy) ? TILEY_VAR / 2 : 0);
   }
 
-  if (border.draw_masked[GAME_MODE_PLAYING])
-  {
-    if (buffer != backbuffer)
-    {
-      /* copy playfield buffer to backbuffer to add masked border */
-      BlitBitmap(buffer, backbuffer, fx, fy, SXSIZE, SYSIZE, SX, SY);
-      DrawMaskedBorder(REDRAW_FIELD);
-    }
-
-    BlitBitmap(backbuffer, target_bitmap,
-              REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE,
-              REAL_SX, REAL_SY);
-  }
-  else
-  {
-    BlitBitmap(buffer, target_bitmap, fx, fy, SXSIZE, SYSIZE, SX, SY);
-  }
+  BlitBitmap(buffer, target_bitmap, fx, fy, SXSIZE, SYSIZE, SX, SY);
 }
 
 void BlitScreenToBitmap(Bitmap *target_bitmap)
@@ -439,7 +423,7 @@ void BlitScreenToBitmap(Bitmap *target_bitmap)
     BlitScreenToBitmap_RND(target_bitmap);
 }
 
-void BackToFront()
+void BackToFront_OLD()
 {
   DrawBuffer *buffer = (drawto_field == window ? backbuffer : drawto_field);
 
@@ -575,6 +559,20 @@ void BackToFront()
   redraw_mask = REDRAW_NONE;
 }
 
+void BackToFront()
+{
+  if (redraw_mask == REDRAW_NONE)
+    return;
+
+  // draw masked border to all viewports, if defined
+  DrawMaskedBorder(redraw_mask);
+
+  // blit backbuffer to visible screen
+  BlitBitmap(backbuffer, window, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
+
+  redraw_mask = REDRAW_NONE;
+}
+
 static void FadeCrossSaveBackbuffer()
 {
   BlitBitmap(backbuffer, bitmap_db_cross, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
index 9ebaed30515982bf2c139c78105888ab08afb56c..af450a90cdb3983139799a0c412f102d16117f35 100644 (file)
@@ -79,6 +79,7 @@ void DrawMaskedBorder(int);
 
 void SetDrawtoField(int);
 void RedrawPlayfield();
+void BlitScreenToBitmap_RND(Bitmap *);
 void BlitScreenToBitmap(Bitmap *);
 void BackToFront();