aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJody Northup2009-06-25 08:55:16 +0000
committerJody Northup2009-06-25 08:55:16 +0000
commit53eb83dc95b825b2bf4f5f3943e8f10d9add3aa6 (patch)
treee1ee0e30caa0e83791212348ccaac4b44bf88f25
parent865129a5630017f05d08e778ba1ef430c23cd55a (diff)
downloadscummvm-rg350-53eb83dc95b825b2bf4f5f3943e8f10d9add3aa6.tar.gz
scummvm-rg350-53eb83dc95b825b2bf4f5f3943e8f10d9add3aa6.tar.bz2
scummvm-rg350-53eb83dc95b825b2bf4f5f3943e8f10d9add3aa6.zip
API modification -- replaced "Graphics::PixelFormat getBestFormat()" with "Common::List<Graphics::PixelFormat> getSupportedFormats()"
svn-id: r41854
-rw-r--r--backends/platform/sdl/sdl.h41
-rw-r--r--common/system.h24
-rw-r--r--engines/groovie/groovie.cpp2
3 files changed, 51 insertions, 16 deletions
diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h
index 7aeebf9264..efe1984446 100644
--- a/backends/platform/sdl/sdl.h
+++ b/backends/platform/sdl/sdl.h
@@ -86,21 +86,38 @@ public:
virtual Graphics::PixelFormat getScreenFormat() const { return _screenFormat; }
// Highest supported
- virtual Graphics::PixelFormat getBestFormat() const {
- //TODO scale down 16/32 bit based on hardware support
- {
- SDL_PixelFormat *HWFormat = SDL_GetVideoInfo()->vfmt;
+ virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const {
+ //TODO determine hardware color component order
+ Common::List<Graphics::PixelFormat> list;
+ SDL_PixelFormat *HWFormat = SDL_GetVideoInfo()->vfmt;
#ifdef ENABLE_32BIT
- if (HWFormat->BitsPerPixel >= 32)
- return Graphics::PixelFormat::createFormatRGBA8888();
- if (HWFormat->BitsPerPixel >= 24)
- return Graphics::
- FormatRGB888();
+ if (HWFormat->BitsPerPixel >= 32)
+ {
+ list.push_back(Graphics::PixelFormat::createFormatRGBA8888());
+ list.push_back(Graphics::PixelFormat::createFormatARGB8888());
+ list.push_back(Graphics::PixelFormat::createFormatABGR8888());
+ list.push_back(Graphics::PixelFormat::createFormatBGRA8888()); }
+ if (HWFormat->BitsPerPixel >= 24)
+ {
+ list.push_back(Graphics::PixelFormat::createFormatRGB888());
+ list.push_back(Graphics::PixelFormat::createFormatBGR888());
+ }
#endif //ENABLE_32BIT
- if (HWFormat->BitsPerPixel >= 16)
- return Graphics::PixelFormat::createFormatRGB565();
+ if (HWFormat->BitsPerPixel >= 16)
+ {
+ list.push_back(Graphics::PixelFormat::createFormatRGB565());
+ list.push_back(Graphics::PixelFormat::createFormatXRGB1555());
+ list.push_back(Graphics::PixelFormat::createFormatRGB555());
+ list.push_back(Graphics::PixelFormat::createFormatRGBA4444());
+ list.push_back(Graphics::PixelFormat::createFormatARGB4444());
+ list.push_back(Graphics::PixelFormat::createFormatBGR565());
+ list.push_back(Graphics::PixelFormat::createFormatXBGR1555());
+ list.push_back(Graphics::PixelFormat::createFormatBGR555());
+ list.push_back(Graphics::PixelFormat::createFormatABGR4444());
+ list.push_back(Graphics::PixelFormat::createFormatBGRA4444());
}
- return Graphics::PixelFormat::createFormatCLUT8();
+ list.push_back(Graphics::PixelFormat::createFormatCLUT8());
+ return list;
}
#endif
diff --git a/common/system.h b/common/system.h
index fad9cf378a..af672a505e 100644
--- a/common/system.h
+++ b/common/system.h
@@ -345,16 +345,34 @@ public:
#ifdef ENABLE_RGB_COLOR
/**
- * Returns the pixel format of the screen.
+ * Determine the pixel format currently in use for screen rendering.
+ * @return the active screen pixel format.
* @see Graphics::PixelFormat
*/
virtual Graphics::PixelFormat getScreenFormat() const = 0;
/**
- * Returns the highest color pixel format supported by the backend
+ * Returns a list of all pixel formats supported by the backend.
+ * The first item in the list must be directly supported by hardware,
+ * and provide the largest color space of those formats with direct
+ * hardware support. It is also strongly recommended that remaining
+ * formats should be placed in order of descending preference for the
+ * backend to use.
+ *
+ * EG: a backend that supports 32-bit ABGR and 16-bit 555 BGR in hardware
+ * and provides conversion from equivalent RGB(A) modes should order its list
+ * 1) Graphics::PixelFormat::createFormatABGR8888()
+ * 2) Graphics::PixelFormat::createFormatBGR555()
+ * 3) Graphics::PixelFormat::createFormatRGBA8888()
+ * 4) Graphics::PixelFormat::createFormatRGB555()
+ * 5) Graphics::PixelFormat::createFormatCLUT8()
+ *
* @see Graphics::PixelFormat
+ *
+ * @note All backends supporting RGB color must be able to accept game data
+ * in RGB color order, even if hardware uses BGR or some other color order.
*/
- virtual Graphics::PixelFormat getBestFormat() const = 0;
+ virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const = 0;
#endif
/**
diff --git a/engines/groovie/groovie.cpp b/engines/groovie/groovie.cpp
index c1826e12ce..5b1a139dbe 100644
--- a/engines/groovie/groovie.cpp
+++ b/engines/groovie/groovie.cpp
@@ -73,7 +73,7 @@ Common::Error GroovieEngine::run() {
switch (_gameDescription->version) {
case kGroovieV2:
#ifdef ENABLE_RGB_COLOR
- _pixelFormat = _system->getBestFormat();
+ _pixelFormat = _system->getSupportedFormats().front();
initGraphics(640, 480, true, _pixelFormat);
break;
#endif