Commit 0108ce22 authored by Sam Lantinga's avatar Sam Lantinga

Fixed bug 1224 - Blit map not updated if source palette changed

bastien.bouclet@gmail.com 2011-06-12 11:08:58 PDT

SDL_LowerBlit doesn't update the blit color map if the source surface has
changed.

A proposed fix is attached, storing the source palette version in the color
map.
parent f6bf8590
...@@ -92,7 +92,8 @@ typedef struct SDL_BlitMap ...@@ -92,7 +92,8 @@ typedef struct SDL_BlitMap
/* the version count matches the destination; mismatch indicates /* the version count matches the destination; mismatch indicates
an invalid mapping */ an invalid mapping */
Uint32 palette_version; Uint32 dst_palette_version;
Uint32 src_palette_version;
} SDL_BlitMap; } SDL_BlitMap;
/* Functions found in SDL_blit.c */ /* Functions found in SDL_blit.c */
......
...@@ -969,7 +969,8 @@ SDL_InvalidateMap(SDL_BlitMap * map) ...@@ -969,7 +969,8 @@ SDL_InvalidateMap(SDL_BlitMap * map)
return; return;
} }
map->dst = NULL; map->dst = NULL;
map->palette_version = 0; map->src_palette_version = 0;
map->dst_palette_version = 0;
if (map->info.table) { if (map->info.table) {
SDL_free(map->info.table); SDL_free(map->info.table);
map->info.table = NULL; map->info.table = NULL;
...@@ -1036,9 +1037,15 @@ SDL_MapSurface(SDL_Surface * src, SDL_Surface * dst) ...@@ -1036,9 +1037,15 @@ SDL_MapSurface(SDL_Surface * src, SDL_Surface * dst)
map->dst = dst; map->dst = dst;
if (dstfmt->palette) { if (dstfmt->palette) {
map->palette_version = dstfmt->palette->version; map->dst_palette_version = dstfmt->palette->version;
} else { } else {
map->palette_version = 0; map->dst_palette_version = 0;
}
if (srcfmt->palette) {
map->src_palette_version = srcfmt->palette->version;
} else {
map->src_palette_version = 0;
} }
/* Choose your blitters wisely */ /* Choose your blitters wisely */
......
...@@ -494,7 +494,9 @@ SDL_LowerBlit(SDL_Surface * src, SDL_Rect * srcrect, ...@@ -494,7 +494,9 @@ SDL_LowerBlit(SDL_Surface * src, SDL_Rect * srcrect,
/* Check to make sure the blit mapping is valid */ /* Check to make sure the blit mapping is valid */
if ((src->map->dst != dst) || if ((src->map->dst != dst) ||
(dst->format->palette && (dst->format->palette &&
src->map->palette_version != dst->format->palette->version)) { src->map->dst_palette_version != dst->format->palette->version) ||
(src->format->palette &&
src->map->src_palette_version != src->format->palette->version)) {
if (SDL_MapSurface(src, dst) < 0) { if (SDL_MapSurface(src, dst) < 0) {
return (-1); return (-1);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment