summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
authorSylvain Becker <sylvain.becker@gmail.com>2020-12-28 18:07:03 +0100
committerSylvain Becker <sylvain.becker@gmail.com>2020-12-28 18:07:03 +0100
commit4cc3ffdf5bd7fa8e563d4d72e60c2ca65c5271b3 (patch)
tree34b9ace0841cc66205be2ef37a074f4200959808 /src/render
parente6f74bcb02a3d7e2880f6f9dd545dc50eec6d18d (diff)
downloadsdl-4cc3ffdf5bd7fa8e563d4d72e60c2ca65c5271b3.tar.gz
SDL_RenderCopy: scale before doing intersection
this prevents drawing 1 pixel outside the screen, in letterbox mode
Diffstat (limited to 'src/render')
-rw-r--r--src/render/SDL_render.c19
1 files 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);