[Scummvm-cvs-logs] SF.net SVN: scummvm:[52995] scummvm/trunk/engines/scumm

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Sun Oct 3 19:25:39 CEST 2010


Revision: 52995
          http://scummvm.svn.sourceforge.net/scummvm/?rev=52995&view=rev
Author:   athrxx
Date:     2010-10-03 17:25:38 +0000 (Sun, 03 Oct 2010)

Log Message:
-----------
SCUMM/FM-TOWNS: improve merging of graphics layers

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/gfx.h
    scummvm/trunk/engines/scumm/gfx_towns.cpp

Modified: scummvm/trunk/engines/scumm/gfx.h
===================================================================
--- scummvm/trunk/engines/scumm/gfx.h	2010-10-03 16:28:31 UTC (rev 52994)
+++ scummvm/trunk/engines/scumm/gfx.h	2010-10-03 17:25:38 UTC (rev 52995)
@@ -468,6 +468,7 @@
 
 		uint16 *bltInternX;
 		uint8 **bltInternY;
+		uint16 *bltTmpPal;
 	} _layers[2];
 	
 	uint8 *_outBuffer;

Modified: scummvm/trunk/engines/scumm/gfx_towns.cpp
===================================================================
--- scummvm/trunk/engines/scumm/gfx_towns.cpp	2010-10-03 16:28:31 UTC (rev 52994)
+++ scummvm/trunk/engines/scumm/gfx_towns.cpp	2010-10-03 17:25:38 UTC (rev 52995)
@@ -215,6 +215,8 @@
 	delete[] _layers[1].bltInternX;
 	delete[] _layers[0].bltInternY;
 	delete[] _layers[1].bltInternY;
+	delete[] _layers[0].bltTmpPal;
+	delete[] _layers[1].bltTmpPal;
 	delete[] _outBuffer;
 	_dirtyRects.clear();
 }
@@ -265,6 +267,9 @@
 	for (int i = 0; i < _height; ++i)
 		l->bltInternY[i] = l->pixels + (i / l->scaleH) * l->pitch;
 
+	delete[] l->bltTmpPal;
+	l->bltTmpPal = (l->bpp == 1 && _bpp == 2) ? new uint16[l->numCol] : 0;
+	
 	l->enabled = true;
 	l->onBottom = (!layer || !_layers[0].enabled);
 	l->ready = true;
@@ -448,6 +453,11 @@
 			uint8 *dst = _outBuffer + r->top * _pitch + r->left * _bpp;
 			int ptch = _pitch - (r->right - r->left + 1) * _bpp;
 
+			if (_bpp == 2 && l->bpp == 1) {
+				for (int ic = 0; ic < l->numCol; ic++)
+					l->bltTmpPal[ic] = calc16BitColor(&l->palette[ic * 3]);
+			}
+
 			for (int y = r->top; y <= r->bottom; ++y) {
 				if (l->bpp == _bpp && l->scaleW == 1 && l->onBottom) {
 					memcpy(dst, l->bltInternY[y] + l->bltInternX[r->left], (r->right + 1 - r->left) * _bpp);
@@ -461,7 +471,7 @@
 							if (col || l->onBottom) {
 								if (l->numCol == 16)
 									col = (col >> 4) & (col & 0x0f);
-								WRITE_LE_UINT16(dst, calc16BitColor(&l->palette[col * 3]));
+								WRITE_LE_UINT16(dst, l->bltTmpPal[col]);
 							}
 						} else {
 							WRITE_LE_UINT16(dst, READ_LE_UINT16(src));


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list