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.
--- a/src/video/SDL_blit.h Sat Jan 07 01:25:55 2012 -0500
+++ b/src/video/SDL_blit.h Sat Jan 07 01:28:06 2012 -0500
@@ -92,7 +92,8 @@
/* the version count matches the destination; mismatch indicates
an invalid mapping */
- Uint32 palette_version;
+ Uint32 dst_palette_version;
+ Uint32 src_palette_version;
} SDL_BlitMap;
/* Functions found in SDL_blit.c */
--- a/src/video/SDL_pixels.c Sat Jan 07 01:25:55 2012 -0500
+++ b/src/video/SDL_pixels.c Sat Jan 07 01:28:06 2012 -0500
@@ -969,7 +969,8 @@
return;
}
map->dst = NULL;
- map->palette_version = 0;
+ map->src_palette_version = 0;
+ map->dst_palette_version = 0;
if (map->info.table) {
SDL_free(map->info.table);
map->info.table = NULL;
@@ -1036,9 +1037,15 @@
map->dst = dst;
if (dstfmt->palette) {
- map->palette_version = dstfmt->palette->version;
+ map->dst_palette_version = dstfmt->palette->version;
} 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 */
--- a/src/video/SDL_surface.c Sat Jan 07 01:25:55 2012 -0500
+++ b/src/video/SDL_surface.c Sat Jan 07 01:28:06 2012 -0500
@@ -494,7 +494,9 @@
/* Check to make sure the blit mapping is valid */
if ((src->map->dst != dst) ||
(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) {
return (-1);
}