From 53eb83dc95b825b2bf4f5f3943e8f10d9add3aa6 Mon Sep 17 00:00:00 2001 From: Jody Northup Date: Thu, 25 Jun 2009 08:55:16 +0000 Subject: API modification -- replaced "Graphics::PixelFormat getBestFormat()" with "Common::List getSupportedFormats()" svn-id: r41854 --- backends/platform/sdl/sdl.h | 41 +++++++++++++++++++++++++++++------------ common/system.h | 24 +++++++++++++++++++++--- engines/groovie/groovie.cpp | 2 +- 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 getSupportedFormats() const { + //TODO determine hardware color component order + Common::List 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 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 -- cgit v1.2.3