From 6771877a84c8c2886353d752cb58e6d0da040183 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 15 Oct 2022 13:12:18 -0500 Subject: [PATCH] Make scaleSourceToDestinationSurface() idempotent Deviation between scaling done during window sizing and renderer viewport configuration can lead to small errors that create visible artifacts such as a single pixel pillarbox/letterbox on one side. --- app/streaming/streamutils.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/streaming/streamutils.cpp b/app/streaming/streamutils.cpp index 01889f66..a178480a 100644 --- a/app/streaming/streamutils.cpp +++ b/app/streaming/streamutils.cpp @@ -17,18 +17,16 @@ Uint32 StreamUtils::getPlatformWindowFlags() void StreamUtils::scaleSourceToDestinationSurface(SDL_Rect* src, SDL_Rect* dst) { - int dstH = dst->w * src->h / src->w; - int dstW = dst->h * src->w / src->h; + int dstH = SDL_ceilf((float)dst->w * src->h / src->w); + int dstW = SDL_ceilf((float)dst->h * src->w / src->h); if (dstH > dst->h) { dst->x += (dst->w - dstW) / 2; dst->w = dstW; - SDL_assert(dst->w * src->h / src->w <= dst->h); } else { dst->y += (dst->h - dstH) / 2; dst->h = dstH; - SDL_assert(dst->h * src->w / src->h <= dst->w); } }