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.
This commit is contained in:
Cameron Gutman 2022-10-15 13:12:18 -05:00
parent a860bd8dd5
commit 6771877a84

View file

@ -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);
}
}