From d2b08e8601362bd9f1ade63c9bca892aab0e410e Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Sun, 17 May 2015 13:25:58 +0200 Subject: [PATCH] changed redraw system to prevent unneeded screen updates --- src/game.c | 11 ++++++++++- src/game.h | 1 + src/game_em/input.c | 1 - src/game_sp/main.c | 2 +- src/tools.c | 36 +++++++++++++++++------------------- src/tools.h | 1 + 6 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/game.c b/src/game.c index 59f98fdb..49908daa 100644 --- a/src/game.c +++ b/src/game.c @@ -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; diff --git a/src/game.h b/src/game.h index 3e62cf4d..a962abd7 100644 --- a/src/game.h +++ b/src/game.h @@ -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); diff --git a/src/game_em/input.c b/src/game_em/input.c index 47097518..e314272f 100644 --- a/src/game_em/input.c +++ b/src/game_em/input.c @@ -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 */ diff --git a/src/game_sp/main.c b/src/game_sp/main.c index f0b7603e..51d799e7 100644 --- a/src/game_sp/main.c +++ b/src/game_sp/main.c @@ -59,7 +59,7 @@ void RedrawPlayfield_SP(boolean force_redraw) UpdatePlayfield(force_redraw); - BlitScreenToBitmap_SP(window); + BlitScreenToBitmap_SP(backbuffer); } void UpdateGameDoorValues_SP() diff --git a/src/tools.c b/src/tools.c index 1676bc89..1dc4f4bc 100644 --- a/src/tools.c +++ b/src/tools.c @@ -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); diff --git a/src/tools.h b/src/tools.h index 9ebaed30..af450a90 100644 --- a/src/tools.h +++ b/src/tools.h @@ -79,6 +79,7 @@ void DrawMaskedBorder(int); void SetDrawtoField(int); void RedrawPlayfield(); +void BlitScreenToBitmap_RND(Bitmap *); void BlitScreenToBitmap(Bitmap *); void BackToFront(); -- 2.34.1