diff options
author | Sylvain Becker <sylvain.becker@gmail.com> | 2020-12-28 18:07:03 +0100 |
---|---|---|
committer | Sylvain Becker <sylvain.becker@gmail.com> | 2020-12-28 18:07:03 +0100 |
commit | 4cc3ffdf5bd7fa8e563d4d72e60c2ca65c5271b3 (patch) | |
tree | 34b9ace0841cc66205be2ef37a074f4200959808 /src/render | |
parent | e6f74bcb02a3d7e2880f6f9dd545dc50eec6d18d (diff) | |
download | sdl-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.c | 19 |
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); |