From 0b43c147c9fdc632582e029a2b05791ad13b64c4 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 1 Oct 2012 00:40:26 -0700 Subject: [PATCH] Fixed scaled blitting for complex blit operations (e.g. color modulation and alpha blending) --- src/video/SDL_surface.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/video/SDL_surface.c b/src/video/SDL_surface.c index 73aa300ab..a4dacf58f 100644 --- a/src/video/SDL_surface.c +++ b/src/video/SDL_surface.c @@ -684,6 +684,12 @@ int SDL_LowerBlitScaled(SDL_Surface * src, SDL_Rect * srcrect, SDL_Surface * dst, SDL_Rect * dstrect) { + static const Uint32 complex_copy_flags = ( + SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | + SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | + SDL_COPY_COLORKEY + ); + /* Save off the original dst width, height */ int dstW = dstrect->w; int dstH = dstrect->h; @@ -710,7 +716,9 @@ SDL_LowerBlitScaled(SDL_Surface * src, SDL_Rect * srcrect, src->map->info.flags |= SDL_COPY_NEAREST; - if ( src->format->format == dst->format->format && !SDL_ISPIXELFORMAT_INDEXED(src->format->format) ) { + if ( !(src->map->info.flags & complex_copy_flags) && + src->format->format == dst->format->format && + !SDL_ISPIXELFORMAT_INDEXED(src->format->format) ) { return SDL_SoftStretch( src, &final_src, dst, &final_dst ); } else { return SDL_LowerBlit( src, &final_src, dst, &final_dst );