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
This commit is contained in:
Franck Charlet 2008-10-21 01:44:46 +00:00
parent 2b232bbc48
commit c3182555b9
4 changed files with 65 additions and 112 deletions

View File

@ -165,26 +165,20 @@
PBXFileDataSource_Warnings_ColumnID, PBXFileDataSource_Warnings_ColumnID,
); );
}; };
PBXPerProjectTemplateStateSaveDate = 246222473; PBXPerProjectTemplateStateSaveDate = 246237270;
PBXWorkspaceStateSaveDate = 246222473; PBXWorkspaceStateSaveDate = 246237270;
}; };
perUserProjectItems = { perUserProjectItems = {
F5B19C160EA4D6E8003F4BA4 = F5B19C160EA4D6E8003F4BA4 /* PBXTextBookmark */; F5B19C160EA4D6E8003F4BA4 = F5B19C160EA4D6E8003F4BA4 /* PBXTextBookmark */;
F5B1D1770EA5FE2100AB8D0F = F5B1D1770EA5FE2100AB8D0F /* PBXTextBookmark */; F5B1D1770EA5FE2100AB8D0F = F5B1D1770EA5FE2100AB8D0F /* PBXTextBookmark */;
F5B1D1790EA5FE2100AB8D0F = F5B1D1790EA5FE2100AB8D0F /* PBXTextBookmark */; F5B1D1790EA5FE2100AB8D0F = F5B1D1790EA5FE2100AB8D0F /* PBXTextBookmark */;
F5B1D1B70EA602BA00AB8D0F = F5B1D1B70EA602BA00AB8D0F /* PBXTextBookmark */; F5B1D1B70EA602BA00AB8D0F = F5B1D1B70EA602BA00AB8D0F /* PBXTextBookmark */;
F5B1EE860EAD0F5800B087B5 /* PBXTextBookmark */ = F5B1EE860EAD0F5800B087B5 /* PBXTextBookmark */; F5B1EE860EAD0F5800B087B5 = F5B1EE860EAD0F5800B087B5 /* PBXTextBookmark */;
F5B1EEA40EAD15CD00B087B5 /* PBXTextBookmark */ = F5B1EEA40EAD15CD00B087B5 /* PBXTextBookmark */; F5B1EEA80EAD15CD00B087B5 = F5B1EEA80EAD15CD00B087B5 /* PBXTextBookmark */;
F5B1EEA80EAD15CD00B087B5 /* PBXTextBookmark */ = F5B1EEA80EAD15CD00B087B5 /* PBXTextBookmark */; F5B1EEA90EAD15CD00B087B5 = F5B1EEA90EAD15CD00B087B5 /* PBXTextBookmark */;
F5B1EEA90EAD15CD00B087B5 /* PBXTextBookmark */ = F5B1EEA90EAD15CD00B087B5 /* PBXTextBookmark */; F5B1EEAA0EAD15CD00B087B5 = F5B1EEAA0EAD15CD00B087B5 /* PBXTextBookmark */;
F5B1EEAA0EAD15CD00B087B5 /* PBXTextBookmark */ = F5B1EEAA0EAD15CD00B087B5 /* PBXTextBookmark */; F5B1EEBB0EAD20DC00B087B5 = F5B1EEBB0EAD20DC00B087B5 /* PBXTextBookmark */;
F5B1EEAB0EAD15CD00B087B5 /* PBXTextBookmark */ = F5B1EEAB0EAD15CD00B087B5 /* PBXTextBookmark */; F5B1EEBC0EAD20DC00B087B5 = F5B1EEBC0EAD20DC00B087B5 /* PBXTextBookmark */;
F5B1EEB10EAD173300B087B5 /* PBXTextBookmark */ = F5B1EEB10EAD173300B087B5 /* PBXTextBookmark */;
F5B1EEB20EAD173300B087B5 /* PBXTextBookmark */ = F5B1EEB20EAD173300B087B5 /* PBXTextBookmark */;
F5B1EEB90EAD1BCA00B087B5 /* PBXTextBookmark */ = F5B1EEB90EAD1BCA00B087B5 /* PBXTextBookmark */;
F5B1EEBA0EAD1BCA00B087B5 /* PBXTextBookmark */ = F5B1EEBA0EAD1BCA00B087B5 /* PBXTextBookmark */;
F5B4C0610EA9FFBF007063E8 = F5B4C0610EA9FFBF007063E8 /* PBXBookmark */;
F5B4C0620EA9FFBF007063E8 = F5B4C0620EA9FFBF007063E8 /* PBXTextBookmark */;
}; };
sourceControlManager = F5B19B690EA4BD79003F4BA4 /* Source Control */; sourceControlManager = F5B19B690EA4BD79003F4BA4 /* Source Control */;
userBuildSettings = { userBuildSettings = {
@ -382,16 +376,6 @@
vrLen = 123; vrLen = 123;
vrLoc = 0; 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 */ = { F5B1EEA80EAD15CD00B087B5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark; isa = PBXTextBookmark;
fRef = F5B19B780EA4BE3E003F4BA4 /* divers.c */; fRef = F5B19B780EA4BE3E003F4BA4 /* divers.c */;
@ -406,8 +390,8 @@
isa = PBXTextBookmark; isa = PBXTextBookmark;
comments = "error: parse error at end of input"; comments = "error: parse error at end of input";
fRef = F5B19B850EA4BE3E003F4BA4 /* palette.c */; fRef = F5B19B850EA4BE3E003F4BA4 /* palette.c */;
rLen = 1; rLen = 0;
rLoc = 1937; rLoc = 1934;
rType = 1; rType = 1;
}; };
F5B1EEAA0EAD15CD00B087B5 /* PBXTextBookmark */ = { F5B1EEAA0EAD15CD00B087B5 /* PBXTextBookmark */ = {
@ -420,37 +404,7 @@
vrLen = 123; vrLen = 123;
vrLoc = 0; vrLoc = 0;
}; };
F5B1EEAB0EAD15CD00B087B5 /* PBXTextBookmark */ = { F5B1EEBB0EAD20DC00B087B5 /* 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 */ = {
isa = PBXTextBookmark; isa = PBXTextBookmark;
fRef = F5B19B780EA4BE3E003F4BA4 /* divers.c */; fRef = F5B19B780EA4BE3E003F4BA4 /* divers.c */;
name = "divers.c: 866"; name = "divers.c: 866";
@ -460,7 +414,7 @@
vrLen = 0; vrLen = 0;
vrLoc = 0; vrLoc = 0;
}; };
F5B1EEBA0EAD1BCA00B087B5 /* PBXTextBookmark */ = { F5B1EEBC0EAD20DC00B087B5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark; isa = PBXTextBookmark;
fRef = F5B19B850EA4BE3E003F4BA4 /* palette.c */; fRef = F5B19B850EA4BE3E003F4BA4 /* palette.c */;
name = "palette.c: 1934"; name = "palette.c: 1934";
@ -470,20 +424,6 @@
vrLen = 0; vrLen = 0;
vrLoc = 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 */ = { F5DCE2700EA50EDC0065B0EF /* SDL_image.h */ = {
isa = PBXFileReference; isa = PBXFileReference;
lastKnownFileType = sourcecode.c.h; lastKnownFileType = sourcecode.c.h;

View File

@ -320,7 +320,7 @@
<key>_historyCapacity</key> <key>_historyCapacity</key>
<integer>0</integer> <integer>0</integer>
<key>bookmark</key> <key>bookmark</key>
<string>F5B1EEB90EAD1BCA00B087B5</string> <string>F5B1EEBB0EAD20DC00B087B5</string>
<key>history</key> <key>history</key>
<array> <array>
<string>F5B19C160EA4D6E8003F4BA4</string> <string>F5B19C160EA4D6E8003F4BA4</string>
@ -543,7 +543,7 @@
<key>_historyCapacity</key> <key>_historyCapacity</key>
<integer>0</integer> <integer>0</integer>
<key>bookmark</key> <key>bookmark</key>
<string>F5B1EEBA0EAD1BCA00B087B5</string> <string>F5B1EEBC0EAD20DC00B087B5</string>
<key>history</key> <key>history</key>
<array> <array>
<string>F5B19C160EA4D6E8003F4BA4</string> <string>F5B19C160EA4D6E8003F4BA4</string>

View File

@ -86,7 +86,16 @@ void Set_palette(T_Palette Palette)
PaletteSDL[i].b=(Palette[i].B<<2) + (Palette[i].B>>4); PaletteSDL[i].b=(Palette[i].B<<2) + (Palette[i].B>>4);
} }
//SDL_PHYSPAL| //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) 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) void Scroll_picture(short Decalage_X,short Decalage_Y)
{ {
byte* esi = Ecran_backup; //Source de la copie byte* esi = Ecran_backup; //Source de la copie

View File

@ -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_1;
short Pos_2; 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) if (X_Swap)
{ {
Remap_image_HIGH(Table_de_conversion); Remap_image_HIGH(Table_de_conversion);
@ -968,12 +964,13 @@ void Bouton_Palette(void)
strcpy(Chaine,"± 0"); strcpy(Chaine,"± 0");
} }
Print_dans_fenetre(176,172,Chaine,CM_Noir,CM_Clair); Print_dans_fenetre(176,172,Chaine,CM_Noir,CM_Clair);
} }
Il_faut_remapper=1; Il_faut_remapper=1;
Afficher_curseur(); Afficher_curseur();
Set_palette(Palette_de_travail);
break; break;
case 3 : // Jauge verte case 3 : // Jauge verte
Effacer_curseur(); Effacer_curseur();
@ -1011,7 +1008,9 @@ void Bouton_Palette(void)
Il_faut_remapper=1; Il_faut_remapper=1;
Afficher_curseur(); Afficher_curseur();
Set_palette(Palette_de_travail);
break; break;
case 4 : // Jauge bleue case 4 : // Jauge bleue
Effacer_curseur(); Effacer_curseur();
if (Debut_block==Fin_block) if (Debut_block==Fin_block)
@ -1048,6 +1047,7 @@ void Bouton_Palette(void)
Il_faut_remapper=1; Il_faut_remapper=1;
Afficher_curseur(); Afficher_curseur();
Set_palette(Palette_de_travail);
break; break;
case 5 : // Default 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); Palette_Reafficher_jauges(Jauge_rouge,Jauge_verte,Jauge_bleue,Palette_de_travail,Debut_block,Fin_block);
// On prépare la "modifiabilité" des nouvelles couleurs // On prépare la "modifiabilité" des nouvelles couleurs
Set_palette(Palette_de_travail);
memcpy(Palette_temporaire,Palette_de_travail,sizeof(T_Palette)); memcpy(Palette_temporaire,Palette_de_travail,sizeof(T_Palette));
Il_faut_remapper=1; Il_faut_remapper=1;
@ -1101,7 +1102,7 @@ void Bouton_Palette(void)
Backup_de_l_image_effectue=1; 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)); 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); Palette_Reafficher_jauges(Jauge_rouge,Jauge_verte,Jauge_bleue,Palette_de_travail,Debut_block,Fin_block);
// On prépare la "modifiabilité" des nouvelles couleurs // On prépare la "modifiabilité" des nouvelles couleurs
Set_palette(Palette_de_travail);
memcpy(Palette_temporaire,Palette_de_travail,sizeof(T_Palette)); memcpy(Palette_temporaire,Palette_de_travail,sizeof(T_Palette));
Il_faut_remapper=1; Il_faut_remapper=1;
@ -1412,6 +1416,7 @@ void Bouton_Palette(void)
Il_faut_remapper=1; Il_faut_remapper=1;
Afficher_curseur(); Afficher_curseur();
Set_palette(Palette_de_travail);
break; break;
case 19 : // [-] case 19 : // [-]
@ -1534,6 +1539,7 @@ void Bouton_Palette(void)
Il_faut_remapper=1; Il_faut_remapper=1;
Afficher_curseur(); Afficher_curseur();
Set_palette(Palette_de_travail);
break; break;
case 20 : // Negative case 20 : // Negative
@ -1547,6 +1553,7 @@ void Bouton_Palette(void)
Modifier_Bleu (i,63-Palette_de_travail[i].B,Palette_de_travail); 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); 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 // On prépare la "modifiabilité" des nouvelles couleurs
memcpy(Palette_temporaire,Palette_de_travail,sizeof(T_Palette)); memcpy(Palette_temporaire,Palette_de_travail,sizeof(T_Palette));
@ -1591,6 +1598,7 @@ void Bouton_Palette(void)
Afficher_curseur(); Afficher_curseur();
} }
// On prépare la "modifiabilité" des nouvelles couleurs // On prépare la "modifiabilité" des nouvelles couleurs
Set_palette(Palette_de_travail);
memcpy(Palette_temporaire,Palette_de_travail,sizeof(T_Palette)); memcpy(Palette_temporaire,Palette_de_travail,sizeof(T_Palette));
Il_faut_remapper=1; Il_faut_remapper=1;
@ -1648,28 +1656,33 @@ void Bouton_Palette(void)
while(swap==1) while(swap==1)
{ {
swap=0; swap=0;
h=0;l=0;s=0; h=0;l=0;s=0;
for(Couleur_temporaire=0;Couleur_temporaire<256;Couleur_temporaire++) for(Couleur_temporaire=0;Couleur_temporaire<256;Couleur_temporaire++)
{ {
oh=h; ol=l; os=s; oh=h; ol=l; os=s;
// On trie par Chrominance (H) et Luminance (L) // On trie par Chrominance (H) et Luminance (L)
rgb2hl(Palette_de_travail[Couleur_temporaire].R, rgb2hl(Palette_de_travail[Couleur_temporaire].R,
Palette_de_travail[Couleur_temporaire].V, Palette_de_travail[Couleur_temporaire].V,
Palette_de_travail[Couleur_temporaire].B,&h,&l,&s); Palette_de_travail[Couleur_temporaire].B,&h,&l,&s);
if( if(
((s==0) && (os>0)) // Un gris passe devant une couleur saturée ((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... || (((s>0 && os > 0) || (s==os && s==0)) // Deux couleurs saturées ou deux gris...
&& (h<oh || (h==oh && l<ol)))) // Dans ce cas on décide avec chroma puis lumi && (h<oh || (h==oh && l<ol)))) // Dans ce cas on décide avec chroma puis lumi
{ {
// On échange la couleur avec la précédente // On échange la couleur avec la précédente
Swap(0,Couleur_temporaire,Couleur_temporaire-1,1,Palette_de_travail,Utilisation_couleur); Swap(0,Couleur_temporaire,Couleur_temporaire-1,1,Palette_de_travail,Utilisation_couleur, 0);
swap=1; swap=1;
} }
} }
} }
Il_faut_remapper=1;
// Maintenant, tous ces calculs doivent êtres pris en compte dans la
// palette, l'image et à l'écran.
Set_palette(Palette_de_travail);
Il_faut_remapper=1;
} }
break; break;
} }