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.
This commit is contained in:
parent
f6bf85902d
commit
0108ce2260
3 changed files with 15 additions and 5 deletions
|
@ -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)
|
||||||
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)
|
||||||
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,
|
||||||
/* 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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue