From c395578be8579f1b49885ac662f6fe1111d9f95e Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Wed, 15 Oct 2008 23:33:25 +0000 Subject: [PATCH] Provides an intermediate refresh mode. You can activate it in sdlscreen.c git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@267 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- sdlscreen.c | 64 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 12 deletions(-) diff --git a/sdlscreen.c b/sdlscreen.c index de032508..8b521bb3 100644 --- a/sdlscreen.c +++ b/sdlscreen.c @@ -25,6 +25,7 @@ #include "sdlscreen.h" #include "divers.h" #include "erreurs.h" +#include "graph.h" // Mise à jour minimaliste en nombre de pixels #define METHODE_UPDATE_MULTI_RECTANGLE 1 @@ -497,12 +498,40 @@ void Gere_Evenement_SDL(SDL_Event * event) } } +#if (METHODE_UPDATE == METHODE_UPDATE_PAR_CUMUL) +short Min_X=0; +short Min_Y=0; +short Max_X=10000; +short Max_Y=10000; +#endif + +#if (METHODE_UPDATE == METHODE_UPDATE_PLEINE_PAGE) + int Update_necessaire=0; +#endif + void Flush_update(void) { #if (METHODE_UPDATE == METHODE_UPDATE_PLEINE_PAGE) // Mise à jour de la totalité de l'écran + if (Update_necessaire) + { SDL_UpdateRect(Ecran_SDL, 0, 0, 0, 0); + Update_necessaire=0; + } #endif + #if (METHODE_UPDATE == METHODE_UPDATE_PAR_CUMUL) + if (Min_X>=Max_X || Min_Y>=Max_Y) + { + ; // Rien a faire + } + else + { + SDL_UpdateRect(Ecran_SDL, Max(Min_X,0), Max(Min_Y,0), Min(Largeur_ecran, Max_X-Min_X), Min(Hauteur_ecran, Max_Y-Min_Y)); + + Min_X=Min_Y=10000; + Max_X=Max_Y=0; + } + #endif } @@ -511,16 +540,27 @@ void UpdateRect(short X, short Y, unsigned short Largeur, unsigned short Hauteur #if (METHODE_UPDATE == METHODE_UPDATE_MULTI_RECTANGLE) SDL_UpdateRect(Ecran_SDL, (X), (Y), (Largeur), (Hauteur)); #endif + + #if (METHODE_UPDATE == METHODE_UPDATE_PAR_CUMUL) + if (Largeur==0 || Hauteur==0) + { + Min_X=Min_Y=0; + Max_X=Max_Y=10000; + } + else + { + if (X < Min_X) + Min_X = X; + if (Y < Min_Y) + Min_Y = Y; + if (X+Largeur>Max_X) + Max_X=X+Largeur; + if (Y+Hauteur>Max_Y) + Max_Y=Y+Hauteur; + } + #endif + + #if (METHODE_UPDATE == METHODE_UPDATE_PLEINE_PAGE) + Update_necessaire=1; + #endif } - - -#if (METHODE_UPDATE == METHODE_UPDATE_MULTI_RECTANGLE) - -#endif -#if (METHODE_UPDATE == METHODE_UPDATE_PAR_CUMUL) - -#endif -#if (METHODE_UPDATE == METHODE_UPDATE_PLEINE_PAGE) - -#endif -