diff --git a/client/renderSDL/SDLImage.cpp b/client/renderSDL/SDLImage.cpp index d7633358c..16adecf69 100644 --- a/client/renderSDL/SDLImage.cpp +++ b/client/renderSDL/SDLImage.cpp @@ -252,7 +252,7 @@ SDLImageShared::SDLImageShared(const SDLImageShared * from, int integerScaleFact upscalingInProgress = true; - auto scaler = std::make_shared(from->surf, Rect(from->margins, from->fullSize)); + auto scaler = std::make_shared(from->surf, Rect(from->margins, from->fullSize), true); const auto & scalingTask = [this, algorithm, scaler]() { @@ -278,7 +278,7 @@ std::shared_ptr SDLImageShared::scaleTo(const Point & size, if (palette && surf->format->palette) SDL_SetSurfacePalette(surf, palette); - SDLImageScaler scaler(surf, Rect(margins, fullSize)); + SDLImageScaler scaler(surf, Rect(margins, fullSize), true); scaler.scaleSurface(size, EScalingAlgorithm::XBRZ_ALPHA); diff --git a/client/renderSDL/SDLImageScaler.cpp b/client/renderSDL/SDLImageScaler.cpp index e3b5451e5..dfa906e0d 100644 --- a/client/renderSDL/SDLImageScaler.cpp +++ b/client/renderSDL/SDLImageScaler.cpp @@ -196,16 +196,25 @@ void SDLImageScaler::scaleSurfaceIntegerFactor(int factor, EScalingAlgorithm alg } SDLImageScaler::SDLImageScaler(SDL_Surface * surf) - :SDLImageScaler(surf, Rect(0,0,surf->w, surf->h)) + :SDLImageScaler(surf, Rect(0,0,surf->w, surf->h), false) { } -SDLImageScaler::SDLImageScaler(SDL_Surface * surf, const Rect & virtualDimensions) +SDLImageScaler::SDLImageScaler(SDL_Surface * surf, const Rect & virtualDimensions, bool optimizeImage) { - SDLImageOptimizer optimizer(surf, virtualDimensions); - optimizer.optimizeSurface(screen); - intermediate = optimizer.acquireResultSurface(); - virtualDimensionsInput = optimizer.getResultDimensions(); + if (optimizeImage) + { + SDLImageOptimizer optimizer(surf, virtualDimensions); + optimizer.optimizeSurface(screen); + intermediate = optimizer.acquireResultSurface(); + virtualDimensionsInput = optimizer.getResultDimensions(); + } + else + { + intermediate = surf; + intermediate->refcount += 1; + virtualDimensionsInput = virtualDimensions; + } if (intermediate == surf) { diff --git a/client/renderSDL/SDLImageScaler.h b/client/renderSDL/SDLImageScaler.h index b3f94534e..796203029 100644 --- a/client/renderSDL/SDLImageScaler.h +++ b/client/renderSDL/SDLImageScaler.h @@ -43,7 +43,7 @@ class SDLImageScaler : boost::noncopyable public: SDLImageScaler(SDL_Surface * surf); - SDLImageScaler(SDL_Surface * surf, const Rect & virtualDimensions); + SDLImageScaler(SDL_Surface * surf, const Rect & virtualDimensions, bool optimizeImage); ~SDLImageScaler(); /// Performs upscaling or downscaling to a requested dimensions