1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
From: Sam Lantinga <slouken@libsdl.org>
Date: Fri, 3 Oct 2025 13:57:19 -0700
Subject: Fixed destination coordinates when using scale with the software
renderer
(cherry picked from commit d333044462ed2f2ef43f79139c49a6797fc29bf4)
Bug: https://github.com/libsdl-org/SDL/issues/14051
Origin: upstream, 3.2.26, commit:2a3a8f736cebbc26a65b11615e587bf31685049b
---
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 37359be..2812e02 100644
--- a/src/render/software/SDL_render_sw.c
+++ b/src/render/software/SDL_render_sw.c
@@ -878,9 +878,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,
|