[Scummvm-git-logs] scummvm master -> 459e3f54c98953be38ef61d5ae53ffd00c3c88da

dreammaster dreammaster at scummvm.org
Sun Oct 2 00:26:14 CEST 2016


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:
459e3f54c9 TITANIC: Change copyPixel to not be a virtual method


Commit: 459e3f54c98953be38ef61d5ae53ffd00c3c88da
    https://github.com/scummvm/scummvm/commit/459e3f54c98953be38ef61d5ae53ffd00c3c88da
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2016-10-01T18:26:09-04:00

Commit Message:
TITANIC: Change copyPixel to not be a virtual method

Changed paths:
    engines/titanic/support/video_surface.cpp
    engines/titanic/support/video_surface.h
    engines/titanic/titanic.cpp



diff --git a/engines/titanic/support/video_surface.cpp b/engines/titanic/support/video_surface.cpp
index 60bf45d..39a3f51 100644
--- a/engines/titanic/support/video_surface.cpp
+++ b/engines/titanic/support/video_surface.cpp
@@ -29,6 +29,8 @@
 namespace Titanic {
 
 int CVideoSurface::_videoSurfaceCounter = 0;
+byte CVideoSurface::_palette1[32][32];
+byte CVideoSurface::_palette2[32][32];
 
 CVideoSurface::CVideoSurface(CScreenManager *screenManager) :
 		_screenManager(screenManager), _rawSurface(nullptr), _movie(nullptr),
@@ -47,6 +49,24 @@ CVideoSurface::~CVideoSurface() {
 		delete _transparencySurface;
 }
 
+void CVideoSurface::setupPalette(byte palette[32][32], byte val) {
+	for (uint idx1 = 0; idx1 < 32; ++idx1) {
+		for (uint idx2 = 0, base = 0; idx2 < 32; ++idx2, base += idx1) {
+			int64 v = 0x84210843;
+			v *= base;
+			uint v2 = (v >> 36);
+			v = ((v2 >> 31) + v2) & 0xff;
+			palette[idx1][idx2] = v << 3;
+
+			if (val != 0xff && v != idx2) {
+				v = 0x80808081 * v * val;
+				v2 = v >> 39;
+				palette[idx1][idx2] = ((v2 >> 31) + v2) << 3;
+			}
+		}
+	}
+}
+
 void CVideoSurface::setSurface(CScreenManager *screenManager, DirectDrawSurface *surface) {
 	_screenManager = screenManager;
 	_ddSurface = surface;
@@ -250,10 +270,33 @@ bool CVideoSurface::hasFrame() {
 	}
 }
 
-/*------------------------------------------------------------------------*/
+void CVideoSurface::copyPixel(uint16 *destP, const uint16 *srcP, byte transVal, bool is16Bit, bool isAlpha) {
+	const Graphics::PixelFormat srcFormat = is16Bit ?
+		Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0) :
+		Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0);
+	const Graphics::PixelFormat destFormat = _ddSurface->getFormat();
+	transVal &= 0xff;
+	assert(transVal < 32);
+
+	// Get the color
+	byte r, g, b;
+	srcFormat.colorToRGB(*srcP, r, g, b);
+	if (isAlpha) {
+		r = _palette1[31 - transVal][r >> 3];
+		g = _palette1[31 - transVal][g >> 3];
+		b = _palette1[31 - transVal][b >> 3];
+	}
 
-byte OSVideoSurface::_palette1[32][32];
-byte OSVideoSurface::_palette2[32][32];
+	byte r2, g2, b2;
+	destFormat.colorToRGB(*destP, r2, g2, b2);
+	r2 = _palette1[transVal][r2 >> 3];
+	g2 = _palette1[transVal][g2 >> 3];
+	b2 = _palette1[transVal][b2 >> 3];
+
+	*destP = destFormat.RGBToColor(r + r2, g + g2, b + b2);
+}
+
+/*------------------------------------------------------------------------*/
 
 OSVideoSurface::OSVideoSurface(CScreenManager *screenManager, DirectDrawSurface *surface) :
 		CVideoSurface(screenManager) {
@@ -273,24 +316,6 @@ OSVideoSurface::OSVideoSurface(CScreenManager *screenManager, const CResourceKey
 	}
 }
 
-void OSVideoSurface::setupPalette(byte palette[32][32], byte val) {
-	for (uint idx1 = 0; idx1 < 32; ++idx1) {
-		for (uint idx2 = 0, base = 0; idx2 < 32; ++idx2, base += idx1) {
-			int64 v = 0x84210843;
-			v *= base;
-			uint v2 = (v >> 36);
-			v = ((v2 >> 31) + v2) & 0xff;
-			palette[idx1][idx2] = v << 3;
-
-			if (val != 0xff && v != idx2) {
-				v = 0x80808081 * v * val;
-				v2 = v >> 39;
-				palette[idx1][idx2] = ((v2 >> 31) + v2) << 3;
-			}
-		}
-	}
-}
-
 void OSVideoSurface::loadResource(const CResourceKey &key) {
 	_resourceKey = key;
 	_pendingLoad = true;
@@ -488,32 +513,6 @@ void OSVideoSurface::setPixel(const Point &pt, uint pixel) {
 	*pixelP = pixel;
 }
 
-void OSVideoSurface::copyPixel(uint16 *destP, const uint16 *srcP, byte transVal, bool is16Bit, bool isAlpha) {
-	const Graphics::PixelFormat srcFormat = is16Bit ?
-		Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0) :
-		Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0);
-	const Graphics::PixelFormat destFormat = _ddSurface->getFormat();
-	transVal &= 0xff;
-	assert(transVal < 32);
-
-	// Get the color
-	byte r, g, b;
-	srcFormat.colorToRGB(*srcP, r, g, b);
-	if (isAlpha) {
-		r = _palette1[31 - transVal][r >> 3];
-		g = _palette1[31 - transVal][g >> 3];
-		b = _palette1[31 - transVal][b >> 3];
-	}
-
-	byte r2, g2, b2;
-	destFormat.colorToRGB(*destP, r2, g2, b2);
-	r2 = _palette1[transVal][r2 >> 3];
-	g2 = _palette1[transVal][g2 >> 3];
-	b2 = _palette1[transVal][b2 >> 3];
-
-	*destP = destFormat.RGBToColor(r + r2, g + g2, b + b2);
-}
-
 void OSVideoSurface::shiftColors() {
 	if (!loadIfReady())
 		return;
diff --git a/engines/titanic/support/video_surface.h b/engines/titanic/support/video_surface.h
index 89d8a03..37ff791 100644
--- a/engines/titanic/support/video_surface.h
+++ b/engines/titanic/support/video_surface.h
@@ -45,6 +45,22 @@ class CVideoSurface : public ListItem {
 	friend class CJPEGDecode;
 	friend class CTargaDecode;
 private:
+	static byte _palette1[32][32];
+	static byte _palette2[32][32];
+
+	/**
+	 * Setup the shading palettes
+	 */
+	static void setupPalette(byte palette[32][32], byte val);
+public:
+	/**
+	 * Setup statics
+	 */
+	static void setup() {
+		setupPalette(_palette1, 0xff);
+		setupPalette(_palette2, 0xe0);
+	}
+private:
 	/**
 	 * Calculates blitting bounds
 	 */
@@ -182,11 +198,6 @@ public:
 	virtual void setPixel(const Point &pt, uint pixel) = 0;
 
 	/**
-	 * Copies a pixel, handling transparency
-	 */
-	virtual void copyPixel(uint16 *destP, const uint16 *srcP, byte transVal, bool is16Bit, bool isAlpha) = 0;
-
-	/**
 	 * Shifts the colors of the surface.. maybe greys it out?
 	 */
 	virtual void shiftColors() = 0;
@@ -318,26 +329,15 @@ public:
 	 * Returns the transparent color
 	 */
 	uint getTransparencyColor();
+
+	/**
+	 * Copies a pixel, handling transparency
+	 */
+	void copyPixel(uint16 *destP, const uint16 *srcP, byte transVal, bool is16Bit, bool isAlpha);
 };
 
 class OSVideoSurface : public CVideoSurface {
 	friend class OSMovie;
-private:
-	static byte _palette1[32][32];
-	static byte _palette2[32][32];
-
-	/**
-	 * Setup the shading palettes
-	 */
-	static void setupPalette(byte palette[32][32], byte val);
-public:
-	/**
-	 * Setup statics
-	 */
-	static void setup() {
-		setupPalette(_palette1, 0xff);
-		setupPalette(_palette2, 0xe0);
-	}
 public:
 	OSVideoSurface(CScreenManager *screenManager, DirectDrawSurface *surface);
 	OSVideoSurface(CScreenManager *screenManager, const CResourceKey &key, bool flag = false);
@@ -435,11 +435,6 @@ public:
 	virtual void setPixel(const Point &pt, uint pixel);
 
 	/**
-	 * Copies a pixel, handling transparency
-	 */
-	virtual void copyPixel(uint16 *destP, const uint16 *srcP, byte transVal, bool is16Bit, bool isAlpha);
-
-	/**
 	 * Shifts the colors of the surface.. maybe greys it out?
 	 */
 	virtual void shiftColors();
diff --git a/engines/titanic/titanic.cpp b/engines/titanic/titanic.cpp
index 375908a..2566a36 100644
--- a/engines/titanic/titanic.cpp
+++ b/engines/titanic/titanic.cpp
@@ -100,8 +100,8 @@ void TitanicEngine::initialize() {
 	CExitPellerator::init();
 	CEnterExitSecClassMiniLift::init();
 	CTelevision::init();
+	CVideoSurface::setup();
 	TTnpcScript::init();
-	OSVideoSurface::setup();
 
 	_events = new Events(this);
 	_screen = new Graphics::Screen(0, 0);





More information about the Scummvm-git-logs mailing list