mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-04-27 01:34:29 +00:00
Fixed SDL_BlitSurfaceTiledWithScale() with very small scale (thanks @bleeqer!)
This commit is contained in:
@@ -1475,7 +1475,7 @@ bool SDL_BlitSurfaceTiledWithScale(SDL_Surface *src, const SDL_Rect *srcrect, fl
|
||||
CHECK_PARAM((src->flags & SDL_SURFACE_LOCKED) || (dst->flags & SDL_SURFACE_LOCKED)) {
|
||||
return SDL_SetError("Surfaces must not be locked during blit");
|
||||
}
|
||||
CHECK_PARAM(scale <= 0.0f) {
|
||||
CHECK_PARAM(scale < 0.0f) {
|
||||
return SDL_InvalidParamError("scale");
|
||||
}
|
||||
|
||||
@@ -1521,8 +1521,12 @@ bool SDL_BlitSurfaceTiledWithScale(SDL_Surface *src, const SDL_Rect *srcrect, fl
|
||||
SDL_InvalidateMap(&src->map);
|
||||
}
|
||||
|
||||
int tile_width = (int)(r_src.w * scale);
|
||||
int tile_height = (int)(r_src.h * scale);
|
||||
int tile_width = (int)SDL_roundf(r_src.w * scale);
|
||||
int tile_height = (int)SDL_roundf(r_src.h * scale);
|
||||
if (tile_width <= 0 || tile_height <= 0) {
|
||||
// Nothing to do
|
||||
return true;
|
||||
}
|
||||
int rows = r_dst.h / tile_height;
|
||||
int cols = r_dst.w / tile_width;
|
||||
int remaining_dst_w = (r_dst.w - cols * tile_width);
|
||||
|
||||
Reference in New Issue
Block a user