[Scummvm-git-logs] scummvm master -> 84a5e88356403064175aca53ee5305099061a884

OMGPizzaGuy 48367439+OMGPizzaGuy at users.noreply.github.com
Thu Jan 21 05:16:34 UTC 2021


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
84a5e88356 ULTIMA8: Fix specialized TTF palette and border rendering


Commit: 84a5e88356403064175aca53ee5305099061a884
    https://github.com/scummvm/scummvm/commit/84a5e88356403064175aca53ee5305099061a884
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2021-01-20T23:16:14-06:00

Commit Message:
ULTIMA8: Fix specialized TTF palette and border rendering

Changed paths:
    engines/ultima/ultima8/graphics/fonts/tt_font.cpp


diff --git a/engines/ultima/ultima8/graphics/fonts/tt_font.cpp b/engines/ultima/ultima8/graphics/fonts/tt_font.cpp
index 7936d62e0b..12d4f0cb6e 100644
--- a/engines/ultima/ultima8/graphics/fonts/tt_font.cpp
+++ b/engines/ultima/ultima8/graphics/fonts/tt_font.cpp
@@ -168,7 +168,8 @@ RenderedText *TTFont::renderText(const Std::string &text, unsigned int &remainin
 			for (int x = 0; x < textSurf.w; x++) {
 
 				if (!_antiAliased && surfrow[x] == 1) {
-					bufrow[iter->_dims.left + x + _borderSize] = _color | 0xFF000000;
+					bufrow[iter->_dims.left + x + _borderSize] = _color;
+					uint32 borderColor = texture->format.ARGBToColor(0xFF, 0x00, 0x00, 0x00);
 					if (_borderSize <= 0) continue;
 					if (_borderSize == 1) {
 						// optimize common case
@@ -178,7 +179,7 @@ RenderedText *TTFont::renderText(const Std::string &text, unsigned int &remainin
 									    x + 1 + iter->_dims.left + dx < resultWidth &&
 									    y + 1 + dy >= 0 && y + 1 + dy < resultHeight) {
 									if (texBuf[(y + iter->_dims.top + dy + 1)*resultWidth + x + 1 + iter->_dims.left + dx] == 0) {
-										texBuf[(y + iter->_dims.top + dy + 1)*resultWidth + x + 1 + iter->_dims.left + dx] = 0xFF000000;
+										texBuf[(y + iter->_dims.top + dy + 1) * resultWidth + x + 1 + iter->_dims.left + dx] = borderColor;
 									}
 								}
 							}
@@ -191,7 +192,7 @@ RenderedText *TTFont::renderText(const Std::string &text, unsigned int &remainin
 								    x + _borderSize + iter->_dims.left + dx < resultWidth &&
 								    y + _borderSize + dy >= 0 && y + _borderSize + dy < resultHeight) {
 								if (texBuf[(y + iter->_dims.top + dy + _borderSize)*resultWidth + x + _borderSize + iter->_dims.left + dx] == 0) {
-									texBuf[(y + iter->_dims.top + dy + _borderSize)*resultWidth + x + _borderSize + iter->_dims.left + dx] = 0xFF000000;
+									texBuf[(y + iter->_dims.top + dy + _borderSize) * resultWidth + x + _borderSize + iter->_dims.left + dx] = borderColor;
 								}
 							}
 						}
@@ -203,12 +204,12 @@ RenderedText *TTFont::renderText(const Std::string &text, unsigned int &remainin
 
 					byte pixR, pixG, pixB, pixA;
 					textSurf.format.colorToARGB(pixColor, pixA, pixR, pixG, pixB);
-					int idx = pixA;
 
 					if (_borderSize <= 0) {
-						bufrow[iter->_dims.left + x + _borderSize] = TEX32_PACK_RGBA(pixR, pixG, pixB, pixA);
+						bufrow[iter->_dims.left + x + _borderSize] = texture->format.ARGBToColor(pixA, pixR, pixG, pixB);
 					} else {
-						bufrow[iter->_dims.left + x + _borderSize] = TEX32_PACK_RGBA(pixR, pixG, pixB, 0xFF);
+						int idx = texture->format.ARGBToColor(pixA, pixR, pixG, pixB);
+						bufrow[iter->_dims.left + x + _borderSize] = texture->format.ARGBToColor(0xFF, pixR, pixG, pixB);
 
 						// optimize common case
 						if (_borderSize == 1) for (int dx = -1; dx <= 1; dx++) {
@@ -216,10 +217,13 @@ RenderedText *TTFont::renderText(const Std::string &text, unsigned int &remainin
 								if (x + 1 + iter->_dims.left + dx >= 0 &&
 										x + 1 + iter->_dims.left + dx < resultWidth &&
 										y + 1 + dy >= 0 && y + 1 + dy < resultHeight) {
-									uint32 alpha = TEX32_A(texBuf[(y + iter->_dims.top + dy + 1) * resultWidth + x + 1 + iter->_dims.left + dx]);
-									if (alpha != 0xFF) {
-										alpha = 255 - (((255 - alpha) * (255 - idx)) >> 8);
-										texBuf[(y + iter->_dims.top + dy + 1)*resultWidth + x + 1 + iter->_dims.left + dx] = alpha << TEX32_A_SHIFT;
+									pixColor = texBuf[(y + iter->_dims.top + dy + 1) * resultWidth + x + 1 + iter->_dims.left + dx];
+									texture->format.colorToARGB(pixColor, pixA, pixR, pixG, pixB);
+									if (pixA != 0xFF) {
+										// Blend edge color at current transparency with black
+										texture->format.colorToRGB(idx, pixR, pixG, pixB);
+										uint32 borderColor = texture->format.RGBToColor((pixA * pixR) / 255, (pixA * pixG) / 255, (pixA * pixB) / 255);
+										texBuf[(y + iter->_dims.top + dy + 1) * resultWidth + x + 1 + iter->_dims.left + dx] = borderColor;
 									}
 								}
 							}
@@ -229,10 +233,13 @@ RenderedText *TTFont::renderText(const Std::string &text, unsigned int &remainin
 									if (x + _borderSize + iter->_dims.left + dx >= 0 &&
 											x + _borderSize + iter->_dims.left + dx < resultWidth &&
 											y + _borderSize + dy >= 0 && y + _borderSize + dy < resultHeight) {
-										uint32 alpha = TEX32_A(texBuf[(y + iter->_dims.top + dy + _borderSize) * resultWidth + x + _borderSize + iter->_dims.left + dx]);
-										if (alpha != 0xFF) {
-											alpha = 255 - (((255 - alpha) * (255 - idx)) >> 8);
-											texBuf[(y + iter->_dims.top + dy + _borderSize)*resultWidth + x + _borderSize + iter->_dims.left + dx] = alpha << TEX32_A_SHIFT;
+										pixColor = texBuf[(y + iter->_dims.top + dy + _borderSize) * resultWidth + x + _borderSize + iter->_dims.left + dx];
+										texture->format.colorToARGB(pixColor, pixA, pixR, pixG, pixB);
+										if (pixA != 0xFF) {
+											// Blend edge color at current transparency with black
+											texture->format.colorToRGB(idx, pixR, pixG, pixB);
+											uint32 borderColor = texture->format.RGBToColor((pixA * pixR) / 255, (pixA * pixG) / 255,  (pixA * pixB) / 255);
+											texBuf[(y + iter->_dims.top + dy + _borderSize) * resultWidth + x + _borderSize + iter->_dims.left + dx] = borderColor;
 										}
 									}
 								}




More information about the Scummvm-git-logs mailing list