From d333044462ed2f2ef43f79139c49a6797fc29bf4 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 3 Oct 2025 13:57:19 -0700 Subject: [PATCH] Fixed destination coordinates when using scale with the software renderer Fixes https://github.com/libsdl-org/SDL/issues/14051 --- src/render/software/SDL_render_sw.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/render/software/SDL_render_sw.c b/src/render/software/SDL_render_sw.c index a4f628ffc9..f6b9ed56e5 100644 --- a/src/render/software/SDL_render_sw.c +++ b/src/render/software/SDL_render_sw.c @@ -924,9 +924,11 @@ static bool SW_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, v PrepTextureForCopy(cmd, &drawstate); // Apply viewport - if (drawstate.viewport && (drawstate.viewport->x || drawstate.viewport->y)) { - copydata->dstrect.x += drawstate.viewport->x; - copydata->dstrect.y += drawstate.viewport->y; + if (drawstate.viewport && + (drawstate.viewport->x || drawstate.viewport->y) && + (copydata->scale_x > 0.0f && copydata->scale_y > 0.0f)) { + copydata->dstrect.x += drawstate.viewport->x / copydata->scale_x; + copydata->dstrect.y += drawstate.viewport->y / copydata->scale_y; } SW_RenderCopyEx(renderer, surface, cmd->data.draw.texture, ©data->srcrect,