summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSylvain Becker <sylvain.becker@gmail.com>2021-01-28 15:33:47 +0100
committerSylvain Becker <sylvain.becker@gmail.com>2021-01-28 15:33:47 +0100
commiteb63e2d3f381745678a882a6739122d19df69667 (patch)
tree4108eb3613b95e33d9d85c81bb49e9a0aa5d90b7 /src
parent926af6ffed791d4f44b03d024cd4e2e3acb8ca2a (diff)
downloadsdl-eb63e2d3f381745678a882a6739122d19df69667.tar.gz
Fixed bug 5510 - simplify the scaling functions
Diffstat (limited to 'src')
-rw-r--r--src/video/SDL_blit_slow.c21
-rwxr-xr-xsrc/video/sdlgenblit.pl21
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__;