From: <av...@us...> - 2012-02-12 19:10:21
|
Revision: 3765 http://sc2.svn.sourceforge.net/sc2/?rev=3765&view=rev Author: avolkov Date: 2012-02-12 19:10:15 +0000 (Sun, 12 Feb 2012) Log Message: ----------- Cleanup colormaps upon exiting the game; bug #1149 Modified Paths: -------------- trunk/sc2/src/libs/graphics/cmap.c trunk/sc2/src/libs/graphics/dcqueue.c trunk/sc2/src/libs/graphics/gfx_common.c trunk/sc2/src/uqm.c Modified: trunk/sc2/src/libs/graphics/cmap.c =================================================================== --- trunk/sc2/src/libs/graphics/cmap.c 2012-02-12 02:41:11 UTC (rev 3764) +++ trunk/sc2/src/libs/graphics/cmap.c 2012-02-12 19:10:15 UTC (rev 3765) @@ -64,6 +64,10 @@ static Mutex maplock; +static void release_colormap (TFB_ColorMap *map); +static void delete_colormap (TFB_ColorMap *map); + + void InitColorMaps (void) { @@ -84,13 +88,23 @@ void UninitColorMaps (void) { + int i; TFB_ColorMap *next; + for (i = 0; i < MAX_COLORMAPS; ++i) + { + TFB_ColorMap *map = colormaps[i]; + if (!map) + continue; + release_colormap (map); + colormaps[i] = 0; + } + // free spares - for ( ; poolhead; poolhead = next) + for ( ; poolhead; poolhead = next, --poolcount) { next = poolhead->next; - HFree (poolhead); + delete_colormap (poolhead); } DestroyMutex (fadeLock); @@ -155,6 +169,13 @@ return map; } +static void +delete_colormap (TFB_ColorMap *map) +{ + FreeNativePalette (map->palette); + HFree (map); +} + static inline void free_colormap (TFB_ColorMap *map) { @@ -172,8 +193,7 @@ } else { // don't need any more spares - FreeNativePalette (map->palette); - HFree (map); + delete_colormap (map); } } @@ -193,7 +213,7 @@ return map; } -static inline void +static void release_colormap (TFB_ColorMap *map) { if (!map) Modified: trunk/sc2/src/libs/graphics/dcqueue.c =================================================================== --- trunk/sc2/src/libs/graphics/dcqueue.c 2012-02-12 02:41:11 UTC (rev 3764) +++ trunk/sc2/src/libs/graphics/dcqueue.c 2012-02-12 19:10:15 UTC (rev 3765) @@ -635,6 +635,13 @@ HFree (data); break; } + case TFB_DRAWCOMMANDTYPE_IMAGE: + { + TFB_ColorMap *cmap = DC.data.image.colormap; + if (cmap) + TFB_ReturnColorMap (cmap); + break; + } case TFB_DRAWCOMMANDTYPE_SENDSIGNAL: { ClearSemaphore (DC.data.sendsignal.sem); Modified: trunk/sc2/src/libs/graphics/gfx_common.c =================================================================== --- trunk/sc2/src/libs/graphics/gfx_common.c 2012-02-12 02:41:11 UTC (rev 3764) +++ trunk/sc2/src/libs/graphics/gfx_common.c 2012-02-12 19:10:15 UTC (rev 3765) @@ -99,7 +99,7 @@ been processed. */ void -FlushGraphics () +FlushGraphics (void) { TFB_DrawScreen_WaitForSignal (); } Modified: trunk/sc2/src/uqm.c =================================================================== --- trunk/sc2/src/uqm.c 2012-02-12 02:41:11 UTC (rev 3764) +++ trunk/sc2/src/uqm.c 2012-02-12 19:10:15 UTC (rev 3765) @@ -467,9 +467,10 @@ // Not yet: TFB_UninitInput (); unInitAudio (); uninit_communication (); - UninitColorMaps (); // TODO: Merge into TFB_UninitGraphics when it goes live TFB_PurgeDanglingGraphics (); + // Purge above refers to colormaps which have to be still up + UninitColorMaps (); // Not yet: TFB_UninitGraphics (); #ifdef NETPLAY This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |