From c3182555b98bc49ef9ff6f9fac7dc626dbcfd15d Mon Sep 17 00:00:00 2001 From: Franck Charlet Date: Tue, 21 Oct 2008 01:44:46 +0000 Subject: [PATCH] I noticed modifying the logical palette only wasn't effective in fullscreen mode so i modified the palette functions to act a little bit differently: the physical palette is only refreshed globally after all locals colors are modified, that should hopefully fix the speed issue as it looks like there's also a vblank wait when the physical palette is modified (that's how it acts on mac). git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@293 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- Grafx2.xcodeproj/xx.pbxuser | 84 +++++---------------------------- Grafx2.xcodeproj/xx.perspective | 4 +- divers.c | 20 ++++---- palette.c | 69 ++++++++++++++++----------- 4 files changed, 65 insertions(+), 112 deletions(-) diff --git a/Grafx2.xcodeproj/xx.pbxuser b/Grafx2.xcodeproj/xx.pbxuser index 817d9547..148d5464 100644 --- a/Grafx2.xcodeproj/xx.pbxuser +++ b/Grafx2.xcodeproj/xx.pbxuser @@ -165,26 +165,20 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 246222473; - PBXWorkspaceStateSaveDate = 246222473; + PBXPerProjectTemplateStateSaveDate = 246237270; + PBXWorkspaceStateSaveDate = 246237270; }; perUserProjectItems = { F5B19C160EA4D6E8003F4BA4 = F5B19C160EA4D6E8003F4BA4 /* PBXTextBookmark */; F5B1D1770EA5FE2100AB8D0F = F5B1D1770EA5FE2100AB8D0F /* PBXTextBookmark */; F5B1D1790EA5FE2100AB8D0F = F5B1D1790EA5FE2100AB8D0F /* PBXTextBookmark */; F5B1D1B70EA602BA00AB8D0F = F5B1D1B70EA602BA00AB8D0F /* PBXTextBookmark */; - F5B1EE860EAD0F5800B087B5 /* PBXTextBookmark */ = F5B1EE860EAD0F5800B087B5 /* PBXTextBookmark */; - F5B1EEA40EAD15CD00B087B5 /* PBXTextBookmark */ = F5B1EEA40EAD15CD00B087B5 /* PBXTextBookmark */; - F5B1EEA80EAD15CD00B087B5 /* PBXTextBookmark */ = F5B1EEA80EAD15CD00B087B5 /* PBXTextBookmark */; - F5B1EEA90EAD15CD00B087B5 /* PBXTextBookmark */ = F5B1EEA90EAD15CD00B087B5 /* PBXTextBookmark */; - F5B1EEAA0EAD15CD00B087B5 /* PBXTextBookmark */ = F5B1EEAA0EAD15CD00B087B5 /* PBXTextBookmark */; - F5B1EEAB0EAD15CD00B087B5 /* PBXTextBookmark */ = F5B1EEAB0EAD15CD00B087B5 /* PBXTextBookmark */; - F5B1EEB10EAD173300B087B5 /* PBXTextBookmark */ = F5B1EEB10EAD173300B087B5 /* PBXTextBookmark */; - F5B1EEB20EAD173300B087B5 /* PBXTextBookmark */ = F5B1EEB20EAD173300B087B5 /* PBXTextBookmark */; - F5B1EEB90EAD1BCA00B087B5 /* PBXTextBookmark */ = F5B1EEB90EAD1BCA00B087B5 /* PBXTextBookmark */; - F5B1EEBA0EAD1BCA00B087B5 /* PBXTextBookmark */ = F5B1EEBA0EAD1BCA00B087B5 /* PBXTextBookmark */; - F5B4C0610EA9FFBF007063E8 = F5B4C0610EA9FFBF007063E8 /* PBXBookmark */; - F5B4C0620EA9FFBF007063E8 = F5B4C0620EA9FFBF007063E8 /* PBXTextBookmark */; + F5B1EE860EAD0F5800B087B5 = F5B1EE860EAD0F5800B087B5 /* PBXTextBookmark */; + F5B1EEA80EAD15CD00B087B5 = F5B1EEA80EAD15CD00B087B5 /* PBXTextBookmark */; + F5B1EEA90EAD15CD00B087B5 = F5B1EEA90EAD15CD00B087B5 /* PBXTextBookmark */; + F5B1EEAA0EAD15CD00B087B5 = F5B1EEAA0EAD15CD00B087B5 /* PBXTextBookmark */; + F5B1EEBB0EAD20DC00B087B5 = F5B1EEBB0EAD20DC00B087B5 /* PBXTextBookmark */; + F5B1EEBC0EAD20DC00B087B5 = F5B1EEBC0EAD20DC00B087B5 /* PBXTextBookmark */; }; sourceControlManager = F5B19B690EA4BD79003F4BA4 /* Source Control */; userBuildSettings = { @@ -382,16 +376,6 @@ vrLen = 123; vrLoc = 0; }; - F5B1EEA40EAD15CD00B087B5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = F5B19B780EA4BE3E003F4BA4 /* divers.c */; - name = "divers.c: 865"; - rLen = 0; - rLoc = 24202; - rType = 0; - vrLen = 0; - vrLoc = 0; - }; F5B1EEA80EAD15CD00B087B5 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B19B780EA4BE3E003F4BA4 /* divers.c */; @@ -406,8 +390,8 @@ isa = PBXTextBookmark; comments = "error: parse error at end of input"; fRef = F5B19B850EA4BE3E003F4BA4 /* palette.c */; - rLen = 1; - rLoc = 1937; + rLen = 0; + rLoc = 1934; rType = 1; }; F5B1EEAA0EAD15CD00B087B5 /* PBXTextBookmark */ = { @@ -420,37 +404,7 @@ vrLen = 123; vrLoc = 0; }; - F5B1EEAB0EAD15CD00B087B5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = F5B19B850EA4BE3E003F4BA4 /* palette.c */; - name = "palette.c: 1939"; - rLen = 0; - rLoc = 74893; - rType = 0; - vrLen = 0; - vrLoc = 0; - }; - F5B1EEB10EAD173300B087B5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = F5B19B780EA4BE3E003F4BA4 /* divers.c */; - name = "divers.c: 866"; - rLen = 0; - rLoc = 24260; - rType = 0; - vrLen = 0; - vrLoc = 0; - }; - F5B1EEB20EAD173300B087B5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = F5B19B850EA4BE3E003F4BA4 /* palette.c */; - name = "palette.c: 1939"; - rLen = 0; - rLoc = 74893; - rType = 0; - vrLen = 0; - vrLoc = 0; - }; - F5B1EEB90EAD1BCA00B087B5 /* PBXTextBookmark */ = { + F5B1EEBB0EAD20DC00B087B5 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B19B780EA4BE3E003F4BA4 /* divers.c */; name = "divers.c: 866"; @@ -460,7 +414,7 @@ vrLen = 0; vrLoc = 0; }; - F5B1EEBA0EAD1BCA00B087B5 /* PBXTextBookmark */ = { + F5B1EEBC0EAD20DC00B087B5 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B19B850EA4BE3E003F4BA4 /* palette.c */; name = "palette.c: 1934"; @@ -470,20 +424,6 @@ vrLen = 0; vrLoc = 0; }; - F5B4C0610EA9FFBF007063E8 /* PBXBookmark */ = { - isa = PBXBookmark; - fRef = F5B19B780EA4BE3E003F4BA4 /* divers.c */; - }; - F5B4C0620EA9FFBF007063E8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = F5B19B780EA4BE3E003F4BA4 /* divers.c */; - name = "divers.c: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 123; - vrLoc = 0; - }; F5DCE2700EA50EDC0065B0EF /* SDL_image.h */ = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; diff --git a/Grafx2.xcodeproj/xx.perspective b/Grafx2.xcodeproj/xx.perspective index 58f9b512..5703c137 100644 --- a/Grafx2.xcodeproj/xx.perspective +++ b/Grafx2.xcodeproj/xx.perspective @@ -320,7 +320,7 @@ _historyCapacity 0 bookmark - F5B1EEB90EAD1BCA00B087B5 + F5B1EEBB0EAD20DC00B087B5 history F5B19C160EA4D6E8003F4BA4 @@ -543,7 +543,7 @@ _historyCapacity 0 bookmark - F5B1EEBA0EAD1BCA00B087B5 + F5B1EEBC0EAD20DC00B087B5 history F5B19C160EA4D6E8003F4BA4 diff --git a/divers.c b/divers.c index 3a786057..bc6ef10a 100644 --- a/divers.c +++ b/divers.c @@ -86,7 +86,16 @@ void Set_palette(T_Palette Palette) PaletteSDL[i].b=(Palette[i].B<<2) + (Palette[i].B>>4); } //SDL_PHYSPAL| - SDL_SetPalette(Ecran_SDL,SDL_LOGPAL,PaletteSDL,0,256); + SDL_SetPalette(Ecran_SDL, SDL_PHYSPAL | SDL_LOGPAL, PaletteSDL,0,256); +} + +void Set_color(byte Couleur, byte Rouge, byte Vert, byte Bleu) +{ + SDL_Color comp; + comp.r=Rouge << 2; + comp.g=Vert << 2; + comp.b=Bleu << 2; + SDL_SetPalette(Ecran_SDL, SDL_LOGPAL, &comp, Couleur, 1); } void Attendre_fin_de_click(void) @@ -788,15 +797,6 @@ void Tempo_jauge(byte Vitesse) } } -void Set_color(byte Couleur, byte Rouge, byte Vert, byte Bleu) -{ - SDL_Color comp; - comp.r=Rouge << 2; - comp.g=Vert << 2; - comp.b=Bleu << 2; - SDL_SetPalette(Ecran_SDL, SDL_LOGPAL, &comp, Couleur, 1); -} - void Scroll_picture(short Decalage_X,short Decalage_Y) { byte* esi = Ecran_backup; //Source de la copie diff --git a/palette.c b/palette.c index c1e95a76..453c8a18 100644 --- a/palette.c +++ b/palette.c @@ -209,7 +209,7 @@ void Remap_image_HIGH(byte * Table_de_conversion) } -void Swap(int X_Swap,short Debut_Bloc_1,short Debut_Bloc_2,short Taille_du_bloc,T_Palette Palette, dword * Utilisation_couleur) +void Swap(int X_Swap,short Debut_Bloc_1,short Debut_Bloc_2,short Taille_du_bloc,T_Palette Palette, dword * Utilisation_couleur, int update_palette) { short Pos_1; short Pos_2; @@ -310,10 +310,6 @@ void Swap(int X_Swap,short Debut_Bloc_1,short Debut_Bloc_2,short Taille_du_bloc, } } - // Maintenant, tous ces calculs doivent êtres pris en compte dans la - // palette, l'image et à l'écran. - Set_palette(Palette); - if (X_Swap) { Remap_image_HIGH(Table_de_conversion); @@ -968,12 +964,13 @@ void Bouton_Palette(void) strcpy(Chaine,"± 0"); } Print_dans_fenetre(176,172,Chaine,CM_Noir,CM_Clair); + } Il_faut_remapper=1; Afficher_curseur(); - + Set_palette(Palette_de_travail); break; case 3 : // Jauge verte Effacer_curseur(); @@ -1011,7 +1008,9 @@ void Bouton_Palette(void) Il_faut_remapper=1; Afficher_curseur(); + Set_palette(Palette_de_travail); break; + case 4 : // Jauge bleue Effacer_curseur(); if (Debut_block==Fin_block) @@ -1048,6 +1047,7 @@ void Bouton_Palette(void) Il_faut_remapper=1; Afficher_curseur(); + Set_palette(Palette_de_travail); break; case 5 : // Default @@ -1075,6 +1075,7 @@ void Bouton_Palette(void) } Palette_Reafficher_jauges(Jauge_rouge,Jauge_verte,Jauge_bleue,Palette_de_travail,Debut_block,Fin_block); // On prépare la "modifiabilité" des nouvelles couleurs + Set_palette(Palette_de_travail); memcpy(Palette_temporaire,Palette_de_travail,sizeof(T_Palette)); Il_faut_remapper=1; @@ -1101,7 +1102,7 @@ void Bouton_Palette(void) Backup_de_l_image_effectue=1; } - Swap(Bouton_clicke==8,Debut_block,Couleur_temporaire,Premiere_couleur,Palette_de_travail,Utilisation_couleur); + Swap(Bouton_clicke==8,Debut_block,Couleur_temporaire,Premiere_couleur,Palette_de_travail,Utilisation_couleur, 1); memcpy(Palette_temporaire,Palette_de_travail,sizeof(T_Palette)); @@ -1205,6 +1206,9 @@ void Bouton_Palette(void) Palette_Reafficher_jauges(Jauge_rouge,Jauge_verte,Jauge_bleue,Palette_de_travail,Debut_block,Fin_block); // On prépare la "modifiabilité" des nouvelles couleurs + + Set_palette(Palette_de_travail); + memcpy(Palette_temporaire,Palette_de_travail,sizeof(T_Palette)); Il_faut_remapper=1; @@ -1412,6 +1416,7 @@ void Bouton_Palette(void) Il_faut_remapper=1; Afficher_curseur(); + Set_palette(Palette_de_travail); break; case 19 : // [-] @@ -1534,6 +1539,7 @@ void Bouton_Palette(void) Il_faut_remapper=1; Afficher_curseur(); + Set_palette(Palette_de_travail); break; case 20 : // Negative @@ -1547,6 +1553,7 @@ void Bouton_Palette(void) Modifier_Bleu (i,63-Palette_de_travail[i].B,Palette_de_travail); } Palette_Reafficher_jauges(Jauge_rouge,Jauge_verte,Jauge_bleue,Palette_de_travail,Debut_block,Fin_block); + Set_palette(Palette_de_travail); // On prépare la "modifiabilité" des nouvelles couleurs memcpy(Palette_temporaire,Palette_de_travail,sizeof(T_Palette)); @@ -1591,6 +1598,7 @@ void Bouton_Palette(void) Afficher_curseur(); } // On prépare la "modifiabilité" des nouvelles couleurs + Set_palette(Palette_de_travail); memcpy(Palette_temporaire,Palette_de_travail,sizeof(T_Palette)); Il_faut_remapper=1; @@ -1648,28 +1656,33 @@ void Bouton_Palette(void) while(swap==1) { - swap=0; - h=0;l=0;s=0; - for(Couleur_temporaire=0;Couleur_temporaire<256;Couleur_temporaire++) - { - oh=h; ol=l; os=s; - // On trie par Chrominance (H) et Luminance (L) - rgb2hl(Palette_de_travail[Couleur_temporaire].R, - Palette_de_travail[Couleur_temporaire].V, - Palette_de_travail[Couleur_temporaire].B,&h,&l,&s); - - if( - ((s==0) && (os>0)) // Un gris passe devant une couleur saturée - || (((s>0 && os > 0) || (s==os && s==0)) // Deux couleurs saturées ou deux gris... - && (h0)) // Un gris passe devant une couleur saturée + || (((s>0 && os > 0) || (s==os && s==0)) // Deux couleurs saturées ou deux gris... + && (h