[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