From 9efdafd43d1284143dc72b335620fed8ed5e98c1 Mon Sep 17 00:00:00 2001 From: Sylvain Becker Date: Mon, 28 Dec 2020 18:07:03 +0100 Subject: [PATCH] SDL_RenderCopy: scale before doing intersection this prevents drawing 1 pixel outside the screen, in letterbox mode --- src/render/SDL_render.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c index e80cf6c01..7e555652d 100644 --- a/src/render/SDL_render.c +++ b/src/render/SDL_render.c @@ -2999,24 +2999,25 @@ SDL_RenderCopyF(SDL_Renderer * renderer, SDL_Texture * texture, SDL_RenderGetViewport(renderer, &r); real_dstrect.x = 0.0f; real_dstrect.y = 0.0f; - real_dstrect.w = (float) r.w; - real_dstrect.h = (float) r.h; + real_dstrect.w = (float) r.w * renderer->scale.x; + real_dstrect.h = (float) r.h * renderer->scale.y; if (dstrect) { - if (!SDL_HasIntersectionF(dstrect, &real_dstrect)) { + SDL_FRect dstrect_scaled; + dstrect_scaled.x = dstrect->x * renderer->scale.x; + dstrect_scaled.y = dstrect->y * renderer->scale.y; + dstrect_scaled.w = dstrect->w * renderer->scale.x; + dstrect_scaled.h = dstrect->h * renderer->scale.y; + + if (!SDL_HasIntersectionF(&dstrect_scaled, &real_dstrect)) { return 0; } - real_dstrect = *dstrect; + real_dstrect = dstrect_scaled; } if (texture->native) { texture = texture->native; } - real_dstrect.x *= renderer->scale.x; - real_dstrect.y *= renderer->scale.y; - real_dstrect.w *= renderer->scale.x; - real_dstrect.h *= renderer->scale.y; - texture->last_command_generation = renderer->render_command_generation; retval = QueueCmdCopy(renderer, texture, &real_srcrect, &real_dstrect);