Просмотр исходного кода

Fix corrupted display of H3 fonts when xbrz is in use

Ivan Savenko 9 месяцев назад
Родитель
Сommit
a4052d0cf4

+ 2 - 2
client/renderSDL/SDLImage.cpp

@@ -252,7 +252,7 @@ SDLImageShared::SDLImageShared(const SDLImageShared * from, int integerScaleFact
 
 	upscalingInProgress = true;
 
-	auto scaler = std::make_shared<SDLImageScaler>(from->surf, Rect(from->margins, from->fullSize));
+	auto scaler = std::make_shared<SDLImageScaler>(from->surf, Rect(from->margins, from->fullSize), true);
 
 	const auto & scalingTask = [this, algorithm, scaler]()
 	{
@@ -278,7 +278,7 @@ std::shared_ptr<const ISharedImage> 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);
 

+ 15 - 6
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)
 	{

+ 1 - 1
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