stratagus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Stratagus-CVS] stratagus/src/video video.c


From: Jimmy Salmon
Subject: [Stratagus-CVS] stratagus/src/video video.c
Date: Fri, 05 Dec 2003 23:18:51 -0500

CVSROOT:        /cvsroot/stratagus
Module name:    stratagus
Branch:         
Changes by:     Jimmy Salmon <address@hidden>   03/12/05 23:18:51

Modified files:
        src/video      : video.c 

Log message:
        Optimized ColorCycle for sdl surface

Patches:
Index: stratagus/src/video/video.c
diff -u stratagus/src/video/video.c:1.79 stratagus/src/video/video.c:1.80
--- stratagus/src/video/video.c:1.79    Mon Dec  1 23:00:16 2003
+++ stratagus/src/video/video.c Fri Dec  5 23:18:50 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: video.c,v 1.79 2003/12/02 04:00:16 nehalmistry Exp $
+//     $Id: video.c,v 1.80 2003/12/06 04:18:50 jsalmon3 Exp $
 
 //@{
 
@@ -735,72 +735,63 @@
 // FIXME: cpu intensive to go through the whole PaletteList
 global void ColorCycle(void)
 {
-    int i;
-    SDL_Palette* pal;
-    SDL_Color c;
+    SDL_Color* palcolors;
+    SDL_Color colors[256];
+    int waterlen;
+    int iconlen;
+    int buildinglen;
+
+    waterlen = (ColorWaterCycleEnd - ColorWaterCycleStart) * sizeof(SDL_Color);
+    iconlen = (ColorIconCycleEnd - ColorIconCycleStart) * sizeof(SDL_Color);
+    buildinglen = (ColorBuildingCycleEnd - ColorBuildingCycleStart) * 
sizeof(SDL_Color);
 
     if (ColorCycleAll) {
        PaletteLink* curlink;
 
        curlink = PaletteList;
        while (curlink != NULL) {
-           pal = curlink->Surface->format->palette;
+           palcolors = curlink->Surface->format->palette->colors;
 
-           c = pal->colors[ColorWaterCycleStart];
-           for (i = ColorWaterCycleStart; i < ColorWaterCycleEnd; ++i) {
-               SDL_SetPalette(curlink->Surface, SDL_LOGPAL | SDL_PHYSPAL,
-                   &pal->colors[i + 1], i, 1);
-           }
-           SDL_SetPalette(curlink->Surface, SDL_LOGPAL | SDL_PHYSPAL,
-               &c, ColorWaterCycleEnd, 1);
+           memcpy(colors, palcolors, sizeof(colors));
 
-           c = pal->colors[ColorIconCycleStart];
-           for (i = ColorIconCycleStart; i < ColorIconCycleEnd; ++i) {
-               SDL_SetPalette(curlink->Surface, SDL_LOGPAL | SDL_PHYSPAL,
-                   &pal->colors[i + 1], i, 1);
-           }
-           SDL_SetPalette(curlink->Surface, SDL_LOGPAL | SDL_PHYSPAL,
-               &c, ColorIconCycleEnd, 1);
+           memcpy(colors + ColorWaterCycleStart,
+               palcolors + ColorWaterCycleStart + 1, waterlen);
+           colors[ColorWaterCycleEnd] = palcolors[ColorWaterCycleStart];
 
-           c = pal->colors[ColorBuildingCycleStart];
-           for (i = ColorBuildingCycleStart; i < ColorBuildingCycleEnd; ++i) {
-               SDL_SetPalette(curlink->Surface, SDL_LOGPAL | SDL_PHYSPAL,
-                   &pal->colors[i + 1], i, 1);
-           }
-           SDL_SetPalette(curlink->Surface, SDL_LOGPAL | SDL_PHYSPAL,
-               &c, ColorBuildingCycleEnd, 1);
+           memcpy(colors + ColorIconCycleStart,
+               palcolors + ColorIconCycleStart + 1, iconlen);
+           colors[ColorIconCycleEnd] = palcolors[ColorIconCycleStart];
+
+           memcpy(colors + ColorBuildingCycleStart,
+               palcolors + ColorBuildingCycleStart + 1, buildinglen);
+           colors[ColorBuildingCycleEnd] = palcolors[ColorBuildingCycleStart];
 
+           SDL_SetPalette(curlink->Surface, SDL_LOGPAL | SDL_PHYSPAL,
+               colors, 0, 256);
            curlink = curlink->Prev;
        }
     } else {
        //
        //        Color cycle tileset palette
        //
-       pal = TheMap.TileGraphic->Surface->format->palette;
+       palcolors = TheMap.TileGraphic->Surface->format->palette->colors;
 
-       c = pal->colors[ColorWaterCycleStart];
-       for (i = ColorWaterCycleStart; i < ColorWaterCycleEnd; ++i) {
-           SDL_SetPalette(TheMap.TileGraphic->Surface, SDL_LOGPAL | 
SDL_PHYSPAL,
-               &pal->colors[i + 1], i, 1);
-       }
-       SDL_SetPalette(TheMap.TileGraphic->Surface, SDL_LOGPAL | SDL_PHYSPAL,
-           &c, ColorWaterCycleEnd, 1);
+       memcpy(colors, palcolors, sizeof(colors));
 
-       c = pal->colors[ColorIconCycleStart];
-       for (i = ColorIconCycleStart; i < ColorIconCycleEnd; ++i) {
-           SDL_SetPalette(TheMap.TileGraphic->Surface, SDL_LOGPAL | 
SDL_PHYSPAL,
-               &pal->colors[i + 1], i, 1);
-       }
-       SDL_SetPalette(TheMap.TileGraphic->Surface, SDL_LOGPAL | SDL_PHYSPAL,
-           &c, ColorIconCycleEnd, 1);
+       memcpy(colors + ColorWaterCycleStart,
+           palcolors + ColorWaterCycleStart + 1, waterlen);
+       colors[ColorWaterCycleEnd] = palcolors[ColorWaterCycleStart];
+
+       memcpy(colors + ColorIconCycleStart,
+           palcolors + ColorIconCycleStart + 1, iconlen);
+       colors[ColorIconCycleEnd] = palcolors[ColorIconCycleStart];
+
+       memcpy(colors + ColorBuildingCycleStart,
+           palcolors + ColorBuildingCycleStart + 1, buildinglen);
+       colors[ColorBuildingCycleEnd] = palcolors[ColorBuildingCycleStart];
 
-       c = pal->colors[ColorBuildingCycleStart];
-       for (i = ColorBuildingCycleStart; i < ColorBuildingCycleEnd; ++i) {
-           SDL_SetPalette(TheMap.TileGraphic->Surface, SDL_LOGPAL | 
SDL_PHYSPAL,
-               &pal->colors[i + 1], i, 1);
-       }
        SDL_SetPalette(TheMap.TileGraphic->Surface, SDL_LOGPAL | SDL_PHYSPAL,
-           &c, ColorBuildingCycleEnd, 1);
+           colors, 0, 256);
     }
 
     MapColorCycle();           // FIXME: could be little more informative




reply via email to

[Prev in Thread] Current Thread [Next in Thread]