diff --git a/backends/base-backend.cpp b/backends/base-backend.cpp index 59d674461c1..dfb9e284ce0 100644 --- a/backends/base-backend.cpp +++ b/backends/base-backend.cpp @@ -48,6 +48,11 @@ void BaseBackend::clearOSD() { //what should I do? Remove all TimedMessageDialogs? } +Graphics::PixelFormat BaseBackend::getOSDFormat() { + warning("BaseBackend::getOSDFormat not implemented"); + return Graphics::PixelFormat(); +} + void BaseBackend::initBackend() { // Init Event manager #ifndef DISABLE_DEFAULT_EVENT_MANAGER diff --git a/backends/base-backend.h b/backends/base-backend.h index edee427ca7e..2394edaf380 100644 --- a/backends/base-backend.h +++ b/backends/base-backend.h @@ -35,6 +35,7 @@ public: virtual void displayMessageOnOSD(const char *msg); virtual void copyRectToOSD(const void *buf, int pitch, int x, int y, int w, int h); virtual void clearOSD(); + virtual Graphics::PixelFormat getOSDFormat(); virtual void fillScreen(uint32 col); }; diff --git a/backends/graphics/graphics.h b/backends/graphics/graphics.h index 1063a10a9c7..921dfca61c0 100644 --- a/backends/graphics/graphics.h +++ b/backends/graphics/graphics.h @@ -86,6 +86,8 @@ public: virtual void displayMessageOnOSD(const char *msg) {} virtual void copyRectToOSD(const void *buf, int pitch, int x, int y, int w, int h) {} virtual void clearOSD() {} + virtual Graphics::PixelFormat getOSDFormat() { return Graphics::PixelFormat(); } + // Graphics::PaletteManager interface //virtual void setPalette(const byte *colors, uint start, uint num) = 0; diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index 97788be3ad6..c491b03f1f2 100644 --- a/backends/graphics/opengl/opengl-graphics.cpp +++ b/backends/graphics/opengl/opengl-graphics.cpp @@ -774,6 +774,8 @@ void OpenGLGraphicsManager::clearOSD() { #endif } +Graphics::PixelFormat OpenGLGraphicsManager::getOSDFormat() { return Graphics::PixelFormat(); } //TODO + void OpenGLGraphicsManager::setPalette(const byte *colors, uint start, uint num) { assert(_gameScreen->hasPalette()); diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h index f36d5d17f2c..55d2c5c8260 100644 --- a/backends/graphics/opengl/opengl-graphics.h +++ b/backends/graphics/opengl/opengl-graphics.h @@ -117,6 +117,7 @@ public: virtual void displayMessageOnOSD(const char *msg); virtual void copyRectToOSD(const void *buf, int pitch, int x, int y, int w, int h); virtual void clearOSD(); + virtual Graphics::PixelFormat getOSDFormat(); // PaletteManager interface virtual void setPalette(const byte *colors, uint start, uint num); diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp index 4a33890f42e..85e39839cbc 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp @@ -883,13 +883,26 @@ bool SurfaceSdlGraphicsManager::loadGFXMode() { _osdSurface = SDL_CreateRGBSurface(SDL_SWSURFACE | SDL_RLEACCEL | SDL_SRCCOLORKEY | SDL_SRCALPHA, _hwscreen->w, _hwscreen->h, - 16, - _hwscreen->format->Rmask, - _hwscreen->format->Gmask, - _hwscreen->format->Bmask, - _hwscreen->format->Amask); + 32, + 0xFF000000, + 0x00FF0000, + 0x0000FF00, + 0x000000FF + ); if (_osdSurface == NULL) error("allocating _osdSurface failed"); + + _osdFormat.bytesPerPixel = _osdSurface->format->BytesPerPixel; + + _osdFormat.rLoss = _osdSurface->format->Rloss; + _osdFormat.gLoss = _osdSurface->format->Gloss; + _osdFormat.bLoss = _osdSurface->format->Bloss; + _osdFormat.aLoss = _osdSurface->format->Aloss; + + _osdFormat.rShift = _osdSurface->format->Rshift; + _osdFormat.gShift = _osdSurface->format->Gshift; + _osdFormat.bShift = _osdSurface->format->Bshift; + _osdFormat.aShift = _osdSurface->format->Ashift; SDL_SetColorKey(_osdSurface, SDL_RLEACCEL | SDL_SRCCOLORKEY | SDL_SRCALPHA, kOSDColorKey); #endif @@ -2277,6 +2290,10 @@ void SurfaceSdlGraphicsManager::clearOSD() { // Ensure a full redraw takes place next time the screen is updated _forceFull = true; } + +Graphics::PixelFormat SurfaceSdlGraphicsManager::getOSDFormat() { + return _osdFormat; +} #endif bool SurfaceSdlGraphicsManager::handleScalerHotkeys(Common::KeyCode key) { diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.h b/backends/graphics/surfacesdl/surfacesdl-graphics.h index 01974cf6ab2..ff721ea6fc7 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.h +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.h @@ -147,6 +147,7 @@ public: virtual void displayMessageOnOSD(const char *msg); virtual void copyRectToOSD(const void *buf, int pitch, int x, int y, int w, int h); virtual void clearOSD(); + virtual Graphics::PixelFormat getOSDFormat(); #endif // Override from Common::EventObserver @@ -175,6 +176,8 @@ protected: kOSDColorKey = 1, /** < Transparent color key */ kOSDInitialAlpha = 80 /** < Initial alpha level, in percent */ }; + /** OSD pixel format */ + Graphics::PixelFormat _osdFormat; #endif /** Hardware screen */ diff --git a/backends/modular-backend.cpp b/backends/modular-backend.cpp index 6ad80ecbb3c..e1bdf155710 100644 --- a/backends/modular-backend.cpp +++ b/backends/modular-backend.cpp @@ -249,6 +249,10 @@ void ModularBackend::clearOSD() { _graphicsManager->clearOSD(); } +Graphics::PixelFormat ModularBackend::getOSDFormat() { + return _graphicsManager->getOSDFormat(); +} + void ModularBackend::quit() { exit(0); } diff --git a/backends/modular-backend.h b/backends/modular-backend.h index 06c69b55add..9cde27915f7 100644 --- a/backends/modular-backend.h +++ b/backends/modular-backend.h @@ -129,6 +129,7 @@ public: virtual void displayMessageOnOSD(const char *msg); virtual void copyRectToOSD(const void *buf, int pitch, int x, int y, int w, int h); virtual void clearOSD(); + virtual Graphics::PixelFormat getOSDFormat(); //@} diff --git a/common/system.h b/common/system.h index 6071e4582ba..3cbeee7d825 100644 --- a/common/system.h +++ b/common/system.h @@ -1118,6 +1118,12 @@ public: virtual void clearOSD() = 0; + /** + * Returns 'on screen display' pixel format. + */ + + virtual Graphics::PixelFormat getOSDFormat() = 0; + /** * Return the SaveFileManager, used to store and load savestates * and other modifiable persistent game data. For more information,