From 36bb48e53279f81dbe35e5e96987c6222ef2989d Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 20 Aug 2002 16:58:49 +0000 Subject: [PATCH] Fixed offset bug in hardware accelerated fills and blits --- src/video/SDL_surface.c | 21 +++++++++++++++++++++ src/video/dga/SDL_dgavideo.c | 4 ---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/video/SDL_surface.c b/src/video/SDL_surface.c index 00430ae3b..77799c5eb 100644 --- a/src/video/SDL_surface.c +++ b/src/video/SDL_surface.c @@ -399,6 +399,8 @@ int SDL_LowerBlit (SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect) { SDL_blit do_blit; + SDL_Rect hw_srcrect; + SDL_Rect hw_dstrect; /* Check to make sure the blit mapping is valid */ if ( (src->map->dst != dst) || @@ -410,6 +412,18 @@ int SDL_LowerBlit (SDL_Surface *src, SDL_Rect *srcrect, /* Figure out which blitter to use */ if ( (src->flags & SDL_HWACCEL) == SDL_HWACCEL ) { + if ( src == SDL_VideoSurface ) { + hw_srcrect = *dstrect; + hw_srcrect.x += current_video->offset_x; + hw_srcrect.y += current_video->offset_y; + srcrect = &hw_srcrect; + } + if ( dst == SDL_VideoSurface ) { + hw_dstrect = *dstrect; + hw_dstrect.x += current_video->offset_x; + hw_dstrect.y += current_video->offset_y; + dstrect = &hw_dstrect; + } do_blit = src->map->hw_blit; } else { do_blit = src->map->sw_blit; @@ -533,6 +547,13 @@ int SDL_FillRect(SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color) /* Check for hardware acceleration */ if ( ((dst->flags & SDL_HWSURFACE) == SDL_HWSURFACE) && video->info.blit_fill ) { + SDL_Rect hw_rect; + if ( dst == SDL_VideoSurface ) { + hw_rect = *dstrect; + hw_rect.x += current_video->offset_x; + hw_rect.y += current_video->offset_y; + dstrect = &hw_rect; + } return(video->FillHWRect(this, dst, dstrect, color)); } diff --git a/src/video/dga/SDL_dgavideo.c b/src/video/dga/SDL_dgavideo.c index 0610cd3c3..6f24142b5 100644 --- a/src/video/dga/SDL_dgavideo.c +++ b/src/video/dga/SDL_dgavideo.c @@ -793,10 +793,6 @@ static __inline__ void DGA_dst_to_xy(_THIS, SDL_Surface *dst, int *x, int *y) { *x = (long)((Uint8 *)dst->pixels - memory_base)%memory_pitch; *y = (long)((Uint8 *)dst->pixels - memory_base)/memory_pitch; - if ( dst == this->screen ) { - *x += this->offset_x; - *y += this->offset_y; - } } static int DGA_FillHWRect(_THIS, SDL_Surface *dst, SDL_Rect *rect, Uint32 color)