[Scummvm-cvs-logs] SF.net SVN: scummvm:[41464] scummvm/branches/gsoc2009-16bit

upthorn at users.sourceforge.net upthorn at users.sourceforge.net
Fri Jun 12 10:49:45 CEST 2009


Revision: 41464
          http://scummvm.svn.sourceforge.net/scummvm/?rev=41464&view=rev
Author:   upthorn
Date:     2009-06-12 08:49:45 +0000 (Fri, 12 Jun 2009)

Log Message:
-----------
Unfinished proof of concept regarding my compromise with LordHoto in IRC.

Modified Paths:
--------------
    scummvm/branches/gsoc2009-16bit/backends/platform/sdl/graphics.cpp
    scummvm/branches/gsoc2009-16bit/backends/platform/sdl/sdl.h
    scummvm/branches/gsoc2009-16bit/base/main.cpp
    scummvm/branches/gsoc2009-16bit/common/system.h
    scummvm/branches/gsoc2009-16bit/engines/engine.cpp
    scummvm/branches/gsoc2009-16bit/graphics/pixelformat.h

Modified: scummvm/branches/gsoc2009-16bit/backends/platform/sdl/graphics.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/backends/platform/sdl/graphics.cpp	2009-06-12 08:35:41 UTC (rev 41463)
+++ scummvm/branches/gsoc2009-16bit/backends/platform/sdl/graphics.cpp	2009-06-12 08:49:45 UTC (rev 41464)
@@ -128,7 +128,7 @@
 			errors |= kTransactionPixelFormatNotSupported;
 
 			_videoMode.format = _oldVideoMode.format;
-			_screenFormat = getPixelFormat(_videoMode.format);
+			_screenFormat = _videoMode.format;
 #endif
 		} else if (_videoMode.screenWidth != _oldVideoMode.screenWidth || _videoMode.screenHeight != _oldVideoMode.screenHeight) {
 			errors |= kTransactionSizeChangeFailed;
@@ -362,7 +362,7 @@
 
 		//no need to keep searching if the screen
 		//is already in one of the desired formats
-		if (format == _videoMode.format)
+		if (getPixelFormat(format) == _videoMode.format)
 			return format;
 
 		formatList.pop_front();
@@ -380,7 +380,7 @@
 	return Graphics::kFormatCLUT8;
 }
 
-void OSystem_SDL::initFormat(Graphics::ColorMode format) {
+void OSystem_SDL::initFormat(Graphics::PixelFormat format) {
 	assert(_transactionMode == kTransactionActive);
 
 	//avoid redundant format changes
@@ -389,10 +389,11 @@
 
 	_videoMode.format = format;
 	_transactionDetails.formatChanged = true;
-	_screenFormat = getPixelFormat(format);
+	_screenFormat = format;
 }
 
-//This should only ever be called with a format that is known supported.
+//TODO: Move this out of OSystem and into Graphics, where engine can access it.
+//TODO: ABGR support
 Graphics::PixelFormat OSystem_SDL::getPixelFormat(Graphics::ColorMode format) {
 	Graphics::PixelFormat result;
 	switch (format) {
@@ -407,6 +408,35 @@
 		result.gLoss = 2;
 		result.rLoss = result.bLoss = 3;
 		break;
+	case Graphics::kFormatXRGB1555:
+		//Special case, alpha bit is always high in this mode.
+		result.aLoss = 7;
+		result.bytesPerPixel = 2;
+		result.rLoss = result.gLoss = result.bLoss = 3;
+		result.bShift = 0;
+		result.gShift = result.bShift + result.bBits();
+		result.rShift = result.gShift + result.gBits();
+		result.aShift = result.rShift + result.rBits();
+		//HACK: there should be a clean way to handle setting 
+		//up the color order without prematurely returning
+		return result;
+	case Graphics::kFormatRGBA4444:
+		result.bytesPerPixel = 2;
+		result.aLoss = result.gLoss = result.rLoss = result.bLoss = 4;
+		break;
+	case Graphics::kFormatRGB888:
+		result.bytesPerPixel = 3;
+		result.aLoss = 8;
+		result.gLoss = result.rLoss = result.bLoss = 0;
+		break;
+	case Graphics::kFormatRGBA6666:
+		result.bytesPerPixel = 3;
+		result.aLoss = result.gLoss = result.rLoss = result.bLoss = 2;
+		break;
+	case Graphics::kFormatRGBA8888:
+		result.bytesPerPixel = 4;
+		result.aLoss = result.gLoss = result.rLoss = result.bLoss = 0;
+		break;
 	case Graphics::kFormatCLUT8:
 	default:
 		result.bytesPerPixel = 1;
@@ -414,6 +444,7 @@
 		result.rLoss = result.gLoss = result.bLoss = result.aLoss = 8;
 		return result;
 	}
+
 	result.aShift = 0;
 	result.bShift = result.aBits();
 	result.gShift = result.bShift + result.bBits();

Modified: scummvm/branches/gsoc2009-16bit/backends/platform/sdl/sdl.h
===================================================================
--- scummvm/branches/gsoc2009-16bit/backends/platform/sdl/sdl.h	2009-06-12 08:35:41 UTC (rev 41463)
+++ scummvm/branches/gsoc2009-16bit/backends/platform/sdl/sdl.h	2009-06-12 08:49:45 UTC (rev 41464)
@@ -88,7 +88,7 @@
 
 	// Set the depth and format of the video bitmap
 	// Typically, CLUT8
-	virtual void initFormat(Graphics::ColorMode format);
+	virtual void initFormat(Graphics::PixelFormat format);
 
 	// Game screen
 	virtual Graphics::PixelFormat getScreenFormat() const { return _screenFormat; }
@@ -302,7 +302,7 @@
 		int screenWidth, screenHeight;
 		int overlayWidth, overlayHeight;
 #ifdef ENABLE_16BIT
-		Graphics::ColorMode format;
+		Graphics::PixelFormat format;
 #endif
 	};
 	VideoState _videoMode, _oldVideoMode;

Modified: scummvm/branches/gsoc2009-16bit/base/main.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/base/main.cpp	2009-06-12 08:35:41 UTC (rev 41463)
+++ scummvm/branches/gsoc2009-16bit/base/main.cpp	2009-06-12 08:49:45 UTC (rev 41464)
@@ -227,7 +227,7 @@
 		system.setGraphicsMode(ConfMan.get("gfx_mode").c_str());
 
 #ifdef ENABLE_16BIT
-		system.initFormat(Graphics::kFormatCLUT8);
+		system.initFormat(system.getPixelFormat(Graphics::kFormatCLUT8));
 #endif
 		system.initSize(320, 200);
 

Modified: scummvm/branches/gsoc2009-16bit/common/system.h
===================================================================
--- scummvm/branches/gsoc2009-16bit/common/system.h	2009-06-12 08:35:41 UTC (rev 41463)
+++ scummvm/branches/gsoc2009-16bit/common/system.h	2009-06-12 08:49:45 UTC (rev 41464)
@@ -374,7 +374,7 @@
 	 *
 	 * @param format	A pixel format that the backend screen will use
 	 */
-	virtual void initFormat(Graphics::ColorMode format) = 0;
+	virtual void initFormat(Graphics::PixelFormat format) = 0;
 
 	/**
 	 * Returns the pixel format description of the screen.

Modified: scummvm/branches/gsoc2009-16bit/engines/engine.cpp
===================================================================
--- scummvm/branches/gsoc2009-16bit/engines/engine.cpp	2009-06-12 08:35:41 UTC (rev 41463)
+++ scummvm/branches/gsoc2009-16bit/engines/engine.cpp	2009-06-12 08:49:45 UTC (rev 41464)
@@ -139,7 +139,7 @@
 #ifdef ENABLE_16BIT
 		Graphics::ColorMode format = g_system->findCompatibleFormat(formatList);
 		debug("%X",format); //TODO: set up the pixelFormat here
-		g_system->initFormat(format);
+		g_system->initFormat(g_system->getPixelFormat(format));
 #endif
 		g_system->initSize(width, height);
 

Modified: scummvm/branches/gsoc2009-16bit/graphics/pixelformat.h
===================================================================
--- scummvm/branches/gsoc2009-16bit/graphics/pixelformat.h	2009-06-12 08:35:41 UTC (rev 41463)
+++ scummvm/branches/gsoc2009-16bit/graphics/pixelformat.h	2009-06-12 08:49:45 UTC (rev 41464)
@@ -44,15 +44,15 @@
  * to get the applicable color order.
   */
 enum ColorMode {
-	kFormatCLUT8 = 0,
+	kFormatCLUT8 = 0,		//256 color palette.
 	kFormatRGB555 = 1,
-	kFormatRGB556 = 2,		// 6 bits for blue, in case this ever happens
+	kFormatXRGB1555 = 2,	// Special case, high bit has special purpose, which may be alpha. 
+							// Engines should probably handle this bit internally and pass RGB only, though
 	kFormatRGB565 = 3,
-	kFormatRGB655 = 4,		// 6 bits for red, in case this ever happens
-	kFormatRGBA4444 = 5,
-	kFormatRGB888 = 6,
-	kFormatRGBA6666 = 7,	// I've never heard of this, but it's theoretically possible
-	kFormatRGBA8888 = 8
+	kFormatRGBA4444 = 4,	// since this mode is commonly supported in game hardware, some unimplemented engines may use it?
+	kFormatRGB888 = 5,
+	kFormatRGBA6666 = 6,	// I've never heard of this, but it's vaguely plausible
+	kFormatRGBA8888 = 7
 };
 #endif
 


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