[Scummvm-cvs-logs] SF.net SVN: scummvm:[54069] scummvm/trunk/engines/sci/graphics/palette.cpp

wjpalenstijn at users.sourceforge.net wjpalenstijn at users.sourceforge.net
Thu Nov 4 20:17:44 CET 2010


Revision: 54069
          http://scummvm.svn.sourceforge.net/scummvm/?rev=54069&view=rev
Author:   wjpalenstijn
Date:     2010-11-04 19:17:44 +0000 (Thu, 04 Nov 2010)

Log Message:
-----------
SCI: Use gamma 2.2 for blending undithered colours

Modified Paths:
--------------
    scummvm/trunk/engines/sci/graphics/palette.cpp

Modified: scummvm/trunk/engines/sci/graphics/palette.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/palette.cpp	2010-11-04 18:37:03 UTC (rev 54068)
+++ scummvm/trunk/engines/sci/graphics/palette.cpp	2010-11-04 19:17:44 UTC (rev 54069)
@@ -192,6 +192,16 @@
 	_screen->setPalette(&_sysPalette);
 }
 
+static byte blendColours(byte c1, byte c2) {
+	// linear:
+	// return (c1/2+c2/2)+(c1&1+c2&1)/2;
+
+	// gamma 2.2
+	double t = 0.5 + (pow (c1/255.0, 2.2/1.0) * 255.0) + 
+	           0.5 + (pow (c2/255.0, 2.2/1.0) * 255.0);
+	return (byte)(0.5 + (pow (0.5*t/255.0, 1.0/2.2) * 255.0));
+}
+
 void GfxPalette::setEGA() {
 	int curColor;
 	byte color1, color2;
@@ -219,9 +229,10 @@
 	for (curColor = 0x10; curColor <= 0xFE; curColor++) {
 		_sysPalette.colors[curColor].used = 1;
 		color1 = curColor & 0x0F; color2 = curColor >> 4;
-		_sysPalette.colors[curColor].r = (_sysPalette.colors[color1].r >> 1) + (_sysPalette.colors[color2].r >> 1);
-		_sysPalette.colors[curColor].g = (_sysPalette.colors[color1].g >> 1) + (_sysPalette.colors[color2].g >> 1);
-		_sysPalette.colors[curColor].b = (_sysPalette.colors[color1].b >> 1) + (_sysPalette.colors[color2].b >> 1);
+
+		_sysPalette.colors[curColor].r = blendColours(_sysPalette.colors[color1].r, _sysPalette.colors[color2].r);
+		_sysPalette.colors[curColor].g = blendColours(_sysPalette.colors[color1].g, _sysPalette.colors[color2].g);
+		_sysPalette.colors[curColor].b = blendColours(_sysPalette.colors[color1].b, _sysPalette.colors[color2].b);
 	}
 	_sysPalette.timestamp = 1;
 	setOnScreen();


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