[Scummvm-git-logs] scummvm master -> b579d383eb25e4fc8621b5b91aa276c6c9327894

OMGPizzaGuy noreply at scummvm.org
Sat Sep 9 01:26:48 UTC 2023


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:
b579d383eb ULTIMA8: Move createNativePalette from render surface to palette manager.


Commit: b579d383eb25e4fc8621b5b91aa276c6c9327894
    https://github.com/scummvm/scummvm/commit/b579d383eb25e4fc8621b5b91aa276c6c9327894
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-09-08T19:26:03-05:00

Commit Message:
ULTIMA8: Move createNativePalette from render surface to palette manager.

Changed paths:
    engines/ultima/ultima8/graphics/palette_manager.cpp
    engines/ultima/ultima8/graphics/palette_manager.h
    engines/ultima/ultima8/graphics/render_surface.cpp
    engines/ultima/ultima8/graphics/render_surface.h
    engines/ultima/ultima8/ultima8.cpp


diff --git a/engines/ultima/ultima8/graphics/palette_manager.cpp b/engines/ultima/ultima8/graphics/palette_manager.cpp
index 0bc46a88cbc..2042a089a1b 100644
--- a/engines/ultima/ultima8/graphics/palette_manager.cpp
+++ b/engines/ultima/ultima8/graphics/palette_manager.cpp
@@ -22,7 +22,6 @@
 #include "ultima/ultima8/misc/debugger.h"
 
 #include "ultima/ultima8/graphics/palette_manager.h"
-#include "ultima/ultima8/graphics/render_surface.h"
 #include "ultima/ultima8/graphics/texture.h"
 
 namespace Ultima {
@@ -30,8 +29,7 @@ namespace Ultima8 {
 
 PaletteManager *PaletteManager::_paletteManager = nullptr;
 
-PaletteManager::PaletteManager(RenderSurface *rs)
-	: _renderSurface(rs) {
+PaletteManager::PaletteManager(const Graphics::PixelFormat &format) : _format(format) {
 	debugN(MM_INFO, "Creating PaletteManager...\n");
 
 	_paletteManager = this;
@@ -55,7 +53,7 @@ void PaletteManager::reset() {
 void PaletteManager::updatedPalette(PalIndex index, int maxindex) {
 	Palette *pal = getPalette(index);
 	if (pal)
-		_renderSurface->CreateNativePalette(pal, maxindex);
+		createNativePalette(pal, maxindex, _format);
 }
 
 // Reset all the transforms back to default
@@ -71,18 +69,17 @@ void PaletteManager::resetTransforms() {
 		pal->_transform = Transform_None;
 		for (int j = 0; j < 12; j++)
 			pal->_matrix[j] = matrix[j];
-		_renderSurface->CreateNativePalette(pal); // convert to native format
+		createNativePalette(pal, 0, _format); // convert to native format
 	}
 }
 
-// Change the Render Surface used by the PaletteManager
-void PaletteManager::RenderSurfaceChanged(RenderSurface *rs) {
-	_renderSurface = rs;
+void PaletteManager::PixelFormatChanged(const Graphics::PixelFormat &format) {
+	_format = format;
 
 	// Create native _palettes for all currently loaded _palettes
 	for (unsigned int i = 0; i < _palettes.size(); ++i)
 		if (_palettes[i])
-			_renderSurface->CreateNativePalette(_palettes[i]);
+			createNativePalette(_palettes[i], 0, _format);
 }
 
 void PaletteManager::load(PalIndex index, Common::ReadStream &rs, Common::ReadStream &xformrs) {
@@ -94,7 +91,7 @@ void PaletteManager::load(PalIndex index, Common::ReadStream &rs, Common::ReadSt
 
 	Palette *pal = new Palette;
 	pal->load(rs, xformrs);
-	_renderSurface->CreateNativePalette(pal); // convert to native format
+	createNativePalette(pal, 0, _format); // convert to native format
 
 	_palettes[index] = pal;
 }
@@ -108,7 +105,7 @@ void PaletteManager::load(PalIndex index, Common::ReadStream &rs) {
 
 	Palette *pal = new Palette;
 	pal->load(rs);
-	_renderSurface->CreateNativePalette(pal); // convert to native format
+	createNativePalette(pal, 0, _format); // convert to native format
 
 	_palettes[index] = pal;
 }
@@ -121,7 +118,7 @@ void PaletteManager::duplicate(PalIndex src, PalIndex dest) {
 	if (srcpal)
 		*newpal = *srcpal;
 
-	_renderSurface->CreateNativePalette(newpal); // convert to native format
+	createNativePalette(newpal, 0, _format); // convert to native format
 	if (_palettes.size() <= static_cast<unsigned int>(dest))
 		_palettes.resize(dest + 1);
 	_palettes[dest] = newpal;
@@ -141,7 +138,7 @@ void PaletteManager::transformPalette(PalIndex index, const int16 matrix[12]) {
 
 	for (int i = 0; i < 12; i++)
 		pal->_matrix[i] = matrix[i];
-	_renderSurface->CreateNativePalette(pal); // convert to native format
+	createNativePalette(pal, 0, _format); // convert to native format
 }
 
 void PaletteManager::untransformPalette(PalIndex index) {
@@ -334,5 +331,87 @@ void PaletteManager::getTransformMatrix(int16 matrix[12], uint32 col32) {
 	matrix[11] = (static_cast<int32>(TEX32_B(col32)) * 0x800) / 255;
 }
 
+void PaletteManager::createNativePalette(Palette *palette, int maxindex, const Graphics::PixelFormat &format) {
+	if (maxindex == 0)
+		maxindex = 256;
+	for (int i = 0; i < maxindex; i++) {
+		int32 r, g, b;
+
+		// Normal palette
+		palette->_native_untransformed[i] = format.RGBToColor(palette->_palette[i * 3 + 0],
+															  palette->_palette[i * 3 + 1],
+															  palette->_palette[i * 3 + 2]);
+
+		r = palette->_matrix[0] * palette->_palette[i * 3 + 0] +
+			palette->_matrix[1] * palette->_palette[i * 3 + 1] +
+			palette->_matrix[2] * palette->_palette[i * 3 + 2] +
+			palette->_matrix[3] * 255;
+		if (r < 0)
+			r = 0;
+		if (r > 0x7F800)
+			r = 0x7F800;
+
+		g = palette->_matrix[4] * palette->_palette[i * 3 + 0] +
+			palette->_matrix[5] * palette->_palette[i * 3 + 1] +
+			palette->_matrix[6] * palette->_palette[i * 3 + 2] +
+			palette->_matrix[7] * 255;
+		if (g < 0)
+			g = 0;
+		if (g > 0x7F800)
+			g = 0x7F800;
+
+		b = palette->_matrix[8] * palette->_palette[i * 3 + 0] +
+			palette->_matrix[9] * palette->_palette[i * 3 + 1] +
+			palette->_matrix[10] * palette->_palette[i * 3 + 2] +
+			palette->_matrix[11] * 255;
+		if (b < 0)
+			b = 0;
+		if (b > 0x7F800)
+			b = 0x7F800;
+
+		// Transformed normal palette
+		// FIXME - Wont work on non SDL SRS Implementations
+		palette->_native[i] = format.RGBToColor(static_cast<uint8>(r >> 11),
+												static_cast<uint8>(g >> 11),
+												static_cast<uint8>(b >> 11));
+
+		// Transformed XFORM palette (Uses the TEX32 format)
+		if (TEX32_A(palette->_xform_untransformed[i])) {
+			r = palette->_matrix[0] * TEX32_R(palette->_xform_untransformed[i]) +
+				palette->_matrix[1] * TEX32_G(palette->_xform_untransformed[i]) +
+				palette->_matrix[2] * TEX32_B(palette->_xform_untransformed[i]) +
+				palette->_matrix[3] * 255;
+			if (r < 0)
+				r = 0;
+			if (r > 0x7F800)
+				r = 0x7F800;
+
+			g = palette->_matrix[4] * TEX32_R(palette->_xform_untransformed[i]) +
+				palette->_matrix[5] * TEX32_G(palette->_xform_untransformed[i]) +
+				palette->_matrix[6] * TEX32_B(palette->_xform_untransformed[i]) +
+				palette->_matrix[7] * 255;
+			if (g < 0)
+				g = 0;
+			if (g > 0x7F800)
+				g = 0x7F800;
+
+			b = palette->_matrix[8] * TEX32_R(palette->_xform_untransformed[i]) +
+				palette->_matrix[9] * TEX32_G(palette->_xform_untransformed[i]) +
+				palette->_matrix[10] * TEX32_B(palette->_xform_untransformed[i]) +
+				palette->_matrix[11] * 255;
+			if (b < 0)
+				b = 0;
+			if (b > 0x7F800)
+				b = 0x7F800;
+
+			palette->_xform[i] = TEX32_PACK_RGBA(static_cast<uint8>(r >> 11),
+												 static_cast<uint8>(g >> 11),
+												 static_cast<uint8>(b >> 11),
+												 TEX32_A(palette->_xform_untransformed[i]));
+		} else
+			palette->_xform[i] = 0;
+	}
+}
+
 } // End of namespace Ultima8
 } // End of namespace Ultima
diff --git a/engines/ultima/ultima8/graphics/palette_manager.h b/engines/ultima/ultima8/graphics/palette_manager.h
index 2108c282445..93058889f74 100644
--- a/engines/ultima/ultima8/graphics/palette_manager.h
+++ b/engines/ultima/ultima8/graphics/palette_manager.h
@@ -24,15 +24,14 @@
 
 #include "ultima/ultima8/graphics/palette.h"
 #include "ultima/shared/std/containers.h"
+#include "graphics/pixelformat.h"
 
 namespace Ultima {
 namespace Ultima8 {
 
-class RenderSurface;
-
 class PaletteManager {
 public:
-	explicit PaletteManager(RenderSurface *rs);
+	explicit PaletteManager(const Graphics::PixelFormat &format);
 	~PaletteManager();
 
 	static PaletteManager *get_instance() {
@@ -77,8 +76,8 @@ public:
 	// Alpha will set how much of original palette to keep. 0 = keep none
 	static void getTransformMatrix(int16 matrix[12], uint32 col32);
 
-	//! Change the Render Surface used by the PaletteManager
-	void RenderSurfaceChanged(RenderSurface *rs);
+	//! Change the pixel format used by the PaletteManager
+	void PixelFormatChanged(const Graphics::PixelFormat &format);
 
 	//! Reset the Palette Manager
 	void reset();
@@ -86,9 +85,11 @@ public:
 	//! Reset all the transforms back to default
 	void resetTransforms();
 
+	void createNativePalette(Palette *palette, int maxindex, const Graphics::PixelFormat &format);
+
 private:
 	Std::vector<Palette *> _palettes;
-	RenderSurface *_renderSurface;
+	Graphics::PixelFormat _format;
 
 	static PaletteManager *_paletteManager;
 };
diff --git a/engines/ultima/ultima8/graphics/render_surface.cpp b/engines/ultima/ultima8/graphics/render_surface.cpp
index f98f053cc1e..393da24f9a4 100644
--- a/engines/ultima/ultima8/graphics/render_surface.cpp
+++ b/engines/ultima/ultima8/graphics/render_surface.cpp
@@ -114,94 +114,6 @@ bool RenderSurface::EndPainting() {
 	return true;
 }
 
-//
-// void RenderSurface::CreateNativePalette(Palette* palette)
-//
-// Desc: Create a palette of colours native to the surface
-//
-void RenderSurface::CreateNativePalette(Palette *palette, int maxindex) {
-	const Graphics::PixelFormat &format = _surface->format;
-	if (maxindex == 0)
-		maxindex = 256;
-	for (int i = 0; i < maxindex; i++) {
-		int32 r, g, b;
-
-		// Normal palette
-		palette->_native_untransformed[i] = format.RGBToColor(palette->_palette[i * 3 + 0],
-															  palette->_palette[i * 3 + 1],
-															  palette->_palette[i * 3 + 2]);
-
-		r = palette->_matrix[0] * palette->_palette[i * 3 + 0] +
-			palette->_matrix[1] * palette->_palette[i * 3 + 1] +
-			palette->_matrix[2] * palette->_palette[i * 3 + 2] +
-			palette->_matrix[3] * 255;
-		if (r < 0)
-			r = 0;
-		if (r > 0x7F800)
-			r = 0x7F800;
-
-		g = palette->_matrix[4] * palette->_palette[i * 3 + 0] +
-			palette->_matrix[5] * palette->_palette[i * 3 + 1] +
-			palette->_matrix[6] * palette->_palette[i * 3 + 2] +
-			palette->_matrix[7] * 255;
-		if (g < 0)
-			g = 0;
-		if (g > 0x7F800)
-			g = 0x7F800;
-
-		b = palette->_matrix[8] * palette->_palette[i * 3 + 0] +
-			palette->_matrix[9] * palette->_palette[i * 3 + 1] +
-			palette->_matrix[10] * palette->_palette[i * 3 + 2] +
-			palette->_matrix[11] * 255;
-		if (b < 0)
-			b = 0;
-		if (b > 0x7F800)
-			b = 0x7F800;
-
-		// Transformed normal palette
-		// FIXME - Wont work on non SDL SRS Implementations
-		palette->_native[i] = format.RGBToColor(static_cast<uint8>(r >> 11),
-												static_cast<uint8>(g >> 11),
-												static_cast<uint8>(b >> 11));
-
-		// Transformed XFORM palette (Uses the TEX32 format)
-		if (TEX32_A(palette->_xform_untransformed[i])) {
-			r = palette->_matrix[0] * TEX32_R(palette->_xform_untransformed[i]) +
-				palette->_matrix[1] * TEX32_G(palette->_xform_untransformed[i]) +
-				palette->_matrix[2] * TEX32_B(palette->_xform_untransformed[i]) +
-				palette->_matrix[3] * 255;
-			if (r < 0)
-				r = 0;
-			if (r > 0x7F800)
-				r = 0x7F800;
-
-			g = palette->_matrix[4] * TEX32_R(palette->_xform_untransformed[i]) +
-				palette->_matrix[5] * TEX32_G(palette->_xform_untransformed[i]) +
-				palette->_matrix[6] * TEX32_B(palette->_xform_untransformed[i]) +
-				palette->_matrix[7] * 255;
-			if (g < 0)
-				g = 0;
-			if (g > 0x7F800)
-				g = 0x7F800;
-
-			b = palette->_matrix[8] * TEX32_R(palette->_xform_untransformed[i]) +
-				palette->_matrix[9] * TEX32_G(palette->_xform_untransformed[i]) +
-				palette->_matrix[10] * TEX32_B(palette->_xform_untransformed[i]) +
-				palette->_matrix[11] * 255;
-			if (b < 0)
-				b = 0;
-			if (b > 0x7F800)
-				b = 0x7F800;
-
-			palette->_xform[i] = TEX32_PACK_RGBA(static_cast<uint8>(r >> 11),
-												 static_cast<uint8>(g >> 11),
-												 static_cast<uint8>(b >> 11),
-												 TEX32_A(palette->_xform_untransformed[i]));
-		} else
-			palette->_xform[i] = 0;
-	}
-}
-
 //
 // void RenderSurface::GetSurfaceDims(Rect &r)
 //
diff --git a/engines/ultima/ultima8/graphics/render_surface.h b/engines/ultima/ultima8/graphics/render_surface.h
index bd745a8fa98..1103925ad02 100644
--- a/engines/ultima/ultima8/graphics/render_surface.h
+++ b/engines/ultima/ultima8/graphics/render_surface.h
@@ -119,13 +119,6 @@ public:
 		return _surface;
 	};
 
-	//
-	// Surface Palettes
-	//
-
-	void CreateNativePalette(Palette *palette, int maxindex = 0);
-
-
 	//
 	// Surface Filling
 	//
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index fe5a375147c..7c25d0391a4 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -748,7 +748,7 @@ void Ultima8Engine::GraphicSysInit() {
 	}
 
 	if (_desktopGump) {
-		_paletteManager->RenderSurfaceChanged(new_screen);
+		_paletteManager->PixelFormatChanged(new_screen->getRawSurface()->format);
 		static_cast<DesktopGump *>(_desktopGump)->RenderSurfaceChanged(new_screen);
 		_screen = new_screen;
 		paint();
@@ -773,7 +773,7 @@ void Ultima8Engine::GraphicSysInit() {
 		showSplashScreen();
 	}
 
-	_paletteManager = new PaletteManager(new_screen);
+	_paletteManager = new PaletteManager(new_screen->getRawSurface()->format);
 
 	ConfMan.registerDefault("fadedModal", true);
 	bool faded_modal = ConfMan.getBool("fadedModal");




More information about the Scummvm-git-logs mailing list