diff options
author | Sylvain Becker <sylvain.becker@gmail.com> | 2021-01-28 15:33:47 +0100 |
---|---|---|
committer | Sylvain Becker <sylvain.becker@gmail.com> | 2021-01-28 15:33:47 +0100 |
commit | eb63e2d3f381745678a882a6739122d19df69667 (patch) | |
tree | 4108eb3613b95e33d9d85c81bb49e9a0aa5d90b7 /src | |
parent | 926af6ffed791d4f44b03d024cd4e2e3acb8ca2a (diff) | |
download | sdl-eb63e2d3f381745678a882a6739122d19df69667.tar.gz |
Fixed bug 5510 - simplify the scaling functions
Diffstat (limited to 'src')
-rw-r--r-- | src/video/SDL_blit_slow.c | 21 | ||||
-rwxr-xr-x | src/video/sdlgenblit.pl | 21 |
2 files changed, 11 insertions, 31 deletions
diff --git a/src/video/SDL_blit_slow.c b/src/video/SDL_blit_slow.c index c0c185619..3ef33197c 100644 --- a/src/video/SDL_blit_slow.c +++ b/src/video/SDL_blit_slow.c @@ -40,7 +40,7 @@ SDL_Blit_Slow(SDL_BlitInfo * info) Uint32 dstpixel; Uint32 dstR, dstG, dstB, dstA; int srcy, srcx; - int posy, posx; + Uint32 posy, posx; int incy, incx; SDL_PixelFormat *src_fmt = info->src_fmt; SDL_PixelFormat *dst_fmt = info->dst_fmt; @@ -49,7 +49,6 @@ SDL_Blit_Slow(SDL_BlitInfo * info) Uint32 rgbmask = ~src_fmt->Amask; Uint32 ckey = info->colorkey & rgbmask; - srcy = 0; posy = 0; incy = (info->src_h << 16) / info->dst_h; incx = (info->src_w << 16) / info->dst_w; @@ -58,21 +57,11 @@ SDL_Blit_Slow(SDL_BlitInfo * info) Uint8 *src = 0; Uint8 *dst = info->dst; int n = info->dst_w; - srcx = -1; - posx = 0x10000L; - while (posy >= 0x10000L) { - ++srcy; - posy -= 0x10000L; - } + posx = 0; + srcy = posy >> 16; while (n--) { - if (posx >= 0x10000L) { - while (posx >= 0x10000L) { - ++srcx; - posx -= 0x10000L; - } - src = - (info->src + (srcy * info->src_pitch) + (srcx * srcbpp)); - } + srcx = posx >> 16; + src = (info->src + (srcy * info->src_pitch) + (srcx * srcbpp)); if (src_fmt->Amask) { DISEMBLE_RGBA(src, srcbpp, src_fmt, srcpixel, srcR, srcG, srcB, srcA); diff --git a/src/video/sdlgenblit.pl b/src/video/sdlgenblit.pl index e26730249..63d6dc9b4 100755 --- a/src/video/sdlgenblit.pl +++ b/src/video/sdlgenblit.pl @@ -452,13 +452,12 @@ __EOF__ if ( $scale ) { print FILE <<__EOF__; int srcy, srcx; - int posy, posx; + Uint32 posy, posx; int incy, incx; __EOF__ print FILE <<__EOF__; - srcy = 0; posy = 0; incy = (info->src_h << 16) / info->dst_h; incx = (info->src_w << 16) / info->dst_w; @@ -467,22 +466,14 @@ __EOF__ $format_type{$src} *src = 0; $format_type{$dst} *dst = ($format_type{$dst} *)info->dst; int n = info->dst_w; - srcx = -1; - posx = 0x10000L; - while (posy >= 0x10000L) { - ++srcy; - posy -= 0x10000L; - } + posx = 0; + + srcy = posy >> 16; while (n--) { - if (posx >= 0x10000L) { - while (posx >= 0x10000L) { - ++srcx; - posx -= 0x10000L; - } - src = ($format_type{$src} *)(info->src + (srcy * info->src_pitch) + (srcx * $format_size{$src})); + srcx = posx >> 16; + src = ($format_type{$src} *)(info->src + (srcy * info->src_pitch) + (srcx * $format_size{$src})); __EOF__ print FILE <<__EOF__; - } __EOF__ output_copycore($src, $dst, $modulate, $blend, $is_modulateA_done, $A_is_const_FF); print FILE <<__EOF__; |