diff options
Diffstat (limited to 'backends')
-rw-r--r-- | backends/graphics/default-palette.h | 63 | ||||
-rw-r--r-- | backends/graphics/graphics.h | 4 | ||||
-rw-r--r-- | backends/graphics/opengl/opengl-graphics.h | 4 | ||||
-rw-r--r-- | backends/graphics/sdl/sdl-graphics.h | 5 | ||||
-rw-r--r-- | backends/modular-backend.cpp | 8 | ||||
-rw-r--r-- | backends/modular-backend.h | 3 | ||||
-rw-r--r-- | backends/platform/android/android.cpp | 8 | ||||
-rw-r--r-- | backends/platform/dc/dc.h | 7 | ||||
-rw-r--r-- | backends/platform/ds/arm9/source/osystem_ds.h | 10 | ||||
-rw-r--r-- | backends/platform/iphone/osys_main.h | 8 | ||||
-rw-r--r-- | backends/platform/n64/osys_n64.h | 8 | ||||
-rw-r--r-- | backends/platform/ps2/systemps2.h | 10 | ||||
-rw-r--r-- | backends/platform/psp/default_display_client.h | 2 | ||||
-rw-r--r-- | backends/platform/psp/osys_psp.cpp | 4 | ||||
-rw-r--r-- | backends/platform/psp/osys_psp.h | 6 | ||||
-rw-r--r-- | backends/platform/wii/osystem.h | 6 |
16 files changed, 134 insertions, 22 deletions
diff --git a/backends/graphics/default-palette.h b/backends/graphics/default-palette.h new file mode 100644 index 0000000000..6e3a75350e --- /dev/null +++ b/backends/graphics/default-palette.h @@ -0,0 +1,63 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef BACKENDS_GRAPHICS_DEFAULT_PALETTE_H +#define BACKENDS_GRAPHICS_DEFAULT_PALETTE_H + +#include "graphics/palette.h" + +/** + * This is a default implementation of the PaletteManager interface + * which ensures that grabPalette works as specified. Of course + * it is still necessary to provide code that actually updates + * the (possibly emulated) "hardware" palette of the backend. + * For this purpose, implement the abstract setPaletteIntern + * method. + */ +class DefaultPaletteManager : public PaletteManager { +protected: + byte _palette[4 * 256]; + + /** + * Subclasses should only implement this method and none of the others. + * Its semantics are like that of setPalette, only that it does not need + * to worry about making it possible to query the palette values once they + * have been set. + */ + virtual void setPaletteIntern(const byte *colors, uint start, uint num) = 0; + +public: + void setPalette(const byte *colors, uint start, uint num) { + assert(start + num <= 256); + memcpy(_palette + 4 * start, colors, 4 * num); + setPaletteIntern(colors, start, num); + } + void grabPalette(byte *colors, uint start, uint num) { + assert(start + num <= 256); + memcpy(colors, _palette + 4 * start, 4 * num); + } +}; + +#endif diff --git a/backends/graphics/graphics.h b/backends/graphics/graphics.h index d2ce6534e1..953171d089 100644 --- a/backends/graphics/graphics.h +++ b/backends/graphics/graphics.h @@ -30,11 +30,13 @@ #include "common/noncopyable.h" #include "common/keyboard.h" +#include "graphics/palette.h" + /** * Abstract class for graphics manager. Subclasses * implement the real functionality. */ -class GraphicsManager : Common::NonCopyable { +class GraphicsManager : public PaletteManager { public: virtual ~GraphicsManager() {} diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h index b0334471f1..27c850f0ab 100644 --- a/backends/graphics/opengl/opengl-graphics.h +++ b/backends/graphics/opengl/opengl-graphics.h @@ -81,8 +81,12 @@ public: virtual int16 getHeight(); virtual int16 getWidth(); +protected: + // PaletteManager API virtual void setPalette(const byte *colors, uint start, uint num); virtual void grabPalette(byte *colors, uint start, uint num); + +public: virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); virtual Graphics::Surface *lockScreen(); virtual void unlockScreen(); diff --git a/backends/graphics/sdl/sdl-graphics.h b/backends/graphics/sdl/sdl-graphics.h index 6a55a3d489..0daaab104c 100644 --- a/backends/graphics/sdl/sdl-graphics.h +++ b/backends/graphics/sdl/sdl-graphics.h @@ -101,8 +101,13 @@ public: virtual int16 getHeight(); virtual int16 getWidth(); + +protected: + // PaletteManager API virtual void setPalette(const byte *colors, uint start, uint num); virtual void grabPalette(byte *colors, uint start, uint num); + +public: virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); virtual Graphics::Surface *lockScreen(); virtual void unlockScreen(); diff --git a/backends/modular-backend.cpp b/backends/modular-backend.cpp index df3d631007..52edcebd24 100644 --- a/backends/modular-backend.cpp +++ b/backends/modular-backend.cpp @@ -132,12 +132,8 @@ int16 ModularBackend::getWidth() { return _graphicsManager->getWidth(); } -void ModularBackend::setPalette(const byte *colors, uint start, uint num) { - _graphicsManager->setPalette(colors, start, num); -} - -void ModularBackend::grabPalette(byte *colors, uint start, uint num) { - _graphicsManager->grabPalette(colors, start, num); +PaletteManager *ModularBackend::getPaletteManager() { + return _graphicsManager; } void ModularBackend::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) { diff --git a/backends/modular-backend.h b/backends/modular-backend.h index 5b031880ed..0f9b604de4 100644 --- a/backends/modular-backend.h +++ b/backends/modular-backend.h @@ -87,8 +87,7 @@ public: virtual int16 getHeight(); virtual int16 getWidth(); - virtual void setPalette(const byte *colors, uint start, uint num); - virtual void grabPalette(byte *colors, uint start, uint num); + virtual PaletteManager *getPaletteManager(); virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); virtual Graphics::Surface *lockScreen(); virtual void unlockScreen(); diff --git a/backends/platform/android/android.cpp b/backends/platform/android/android.cpp index 7a4ae24e6b..b790dab036 100644 --- a/backends/platform/android/android.cpp +++ b/backends/platform/android/android.cpp @@ -153,7 +153,7 @@ static void checkGlError(const char* file, int line) { #define CHECK_GL_ERROR() do {} while (false) #endif -class OSystem_Android : public BaseBackend { +class OSystem_Android : public BaseBackend, public PaletteManager { private: jobject _back_ptr; // back pointer to (java) peer instance jmethodID MID_displayMessageOnOSD; @@ -238,8 +238,14 @@ public: virtual int getScreenChangeID() const { return _screen_changeid; } virtual int16 getHeight(); virtual int16 getWidth(); + + virtual PaletteManager *getPaletteManager() { return this; } +protected: + // PaletteManager API virtual void setPalette(const byte *colors, uint start, uint num); virtual void grabPalette(byte *colors, uint start, uint num); + +public: virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); virtual void updateScreen(); virtual Graphics::Surface *lockScreen(); diff --git a/backends/platform/dc/dc.h b/backends/platform/dc/dc.h index b78e5f13df..f1d7454007 100644 --- a/backends/platform/dc/dc.h +++ b/backends/platform/dc/dc.h @@ -69,7 +69,7 @@ class DCCDManager : public DefaultAudioCDManager { void updateCD(); }; -class OSystem_Dreamcast : private DCHardware, public BaseBackend, public FilesystemFactory { +class OSystem_Dreamcast : private DCHardware, public BaseBackend, public PaletteManager, public FilesystemFactory { public: OSystem_Dreamcast(); @@ -98,9 +98,14 @@ class OSystem_Dreamcast : private DCHardware, public BaseBackend, public Filesys int getGraphicsMode() const; // Set colors of the palette + PaletteManager *getPaletteManager() { return this; } +protected: + // PaletteManager API void setPalette(const byte *colors, uint start, uint num); void grabPalette(byte *colors, uint start, uint num); +public: + // Determine the pixel format currently in use for screen rendering. Graphics::PixelFormat getScreenFormat() const; diff --git a/backends/platform/ds/arm9/source/osystem_ds.h b/backends/platform/ds/arm9/source/osystem_ds.h index 50a4353e18..27d75e5124 100644 --- a/backends/platform/ds/arm9/source/osystem_ds.h +++ b/backends/platform/ds/arm9/source/osystem_ds.h @@ -37,7 +37,7 @@ #include "graphics/surface.h" #include "graphics/colormasks.h" -class OSystem_DS : public BaseBackend { +class OSystem_DS : public BaseBackend, public PaletteManager { protected: int eventNum; @@ -92,8 +92,14 @@ public: virtual void initSize(uint width, uint height, const Graphics::PixelFormat *format); virtual int16 getHeight(); virtual int16 getWidth(); + + virtual PaletteManager *getPaletteManager() { return this; } +protected: + // PaletteManager API virtual void setPalette(const byte *colors, uint start, uint num); - virtual void grabPalette(unsigned char *colors, uint start, uint num); + virtual void grabPalette(byte *colors, uint start, uint num); + +public: void restoreHardwarePalette(); virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); diff --git a/backends/platform/iphone/osys_main.h b/backends/platform/iphone/osys_main.h index c925078b46..df01af798a 100644 --- a/backends/platform/iphone/osys_main.h +++ b/backends/platform/iphone/osys_main.h @@ -51,7 +51,7 @@ typedef struct AQCallbackStruct { AudioStreamBasicDescription dataFormat; } AQCallbackStruct; -class OSystem_IPHONE : public BaseBackend { +class OSystem_IPHONE : public BaseBackend, public PaletteManager { protected: static const OSystem::GraphicsMode s_supportedGraphicsModes[]; @@ -132,8 +132,14 @@ public: virtual void initSize(uint width, uint height, const Graphics::PixelFormat *format); virtual int16 getHeight(); virtual int16 getWidth(); + + virtual PaletteManager *getPaletteManager() { return this; } +protected: + // PaletteManager API virtual void setPalette(const byte *colors, uint start, uint num); virtual void grabPalette(byte *colors, uint start, uint num); + +public: virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); virtual void updateScreen(); virtual Graphics::Surface *lockScreen(); diff --git a/backends/platform/n64/osys_n64.h b/backends/platform/n64/osys_n64.h index f0dc6959c1..4b2164cc9f 100644 --- a/backends/platform/n64/osys_n64.h +++ b/backends/platform/n64/osys_n64.h @@ -75,7 +75,7 @@ enum GraphicModeID { OVERS_MPAL_340X240 }; -class OSystem_N64 : public BaseBackend { +class OSystem_N64 : public BaseBackend, public PaletteManager { protected: Common::SaveFileManager *_savefile; Audio::MixerImpl *_mixer; @@ -158,8 +158,14 @@ public: virtual void initSize(uint width, uint height, const Graphics::PixelFormat *format); virtual int16 getHeight(); virtual int16 getWidth(); + + virtual PaletteManager *getPaletteManager() { return this; } +protected: + // PaletteManager API virtual void setPalette(const byte *colors, uint start, uint num); virtual void grabPalette(byte *colors, uint start, uint num); + +public: virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); virtual void updateScreen(); virtual Graphics::Surface *lockScreen(); diff --git a/backends/platform/ps2/systemps2.h b/backends/platform/ps2/systemps2.h index 78973ed3f0..37575f399f 100644 --- a/backends/platform/ps2/systemps2.h +++ b/backends/platform/ps2/systemps2.h @@ -54,7 +54,7 @@ namespace Audio { class MixerImpl; }; -class OSystem_PS2 : public BaseBackend { +class OSystem_PS2 : public BaseBackend, public PaletteManager { public: OSystem_PS2(const char *elfPath); virtual ~OSystem_PS2(void); @@ -64,10 +64,16 @@ public: virtual int16 getHeight(void); virtual int16 getWidth(void); + + virtual PaletteManager *getPaletteManager() { return this; } +protected: + // PaletteManager API virtual void setPalette(const byte *colors, uint start, uint num); + virtual void grabPalette(byte *colors, uint start, uint num); +public: + virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); virtual void setShakePos(int shakeOffset); - virtual void grabPalette(byte *colors, uint start, uint num); virtual bool grabRawScreen(Graphics::Surface *surf); virtual Graphics::Surface *lockScreen(); virtual void unlockScreen(); diff --git a/backends/platform/psp/default_display_client.h b/backends/platform/psp/default_display_client.h index 2e33632eb1..c7189b0168 100644 --- a/backends/platform/psp/default_display_client.h +++ b/backends/platform/psp/default_display_client.h @@ -69,7 +69,7 @@ protected: class Overlay : public DefaultDisplayClient { public: Overlay() {} - ~Overlay() { } + ~Overlay() {} void init(); bool allocate(); diff --git a/backends/platform/psp/osys_psp.cpp b/backends/platform/psp/osys_psp.cpp index 025edeb684..73a030f5d1 100644 --- a/backends/platform/psp/osys_psp.cpp +++ b/backends/platform/psp/osys_psp.cpp @@ -273,11 +273,11 @@ void OSystem_PSP::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, i } int16 OSystem_PSP::getOverlayWidth() { - return (int16) _overlay.getWidth(); + return (int16)_overlay.getWidth(); } int16 OSystem_PSP::getOverlayHeight() { - return (int16) _overlay.getHeight(); + return (int16)_overlay.getHeight(); } void OSystem_PSP::grabPalette(byte *colors, uint start, uint num) { diff --git a/backends/platform/psp/osys_psp.h b/backends/platform/psp/osys_psp.h index d21c7e78ef..8d274bb5bd 100644 --- a/backends/platform/psp/osys_psp.h +++ b/backends/platform/psp/osys_psp.h @@ -44,7 +44,7 @@ #include "backends/timer/psp/timer.h" #include "backends/platform/psp/thread.h" -class OSystem_PSP : public BaseBackend { +class OSystem_PSP : public BaseBackend, public PaletteManager { private: Common::SaveFileManager *_savefile; @@ -94,8 +94,12 @@ public: int16 getHeight(); // Palette related + PaletteManager *getPaletteManager() { return this; } +protected: + // PaletteManager API void setPalette(const byte *colors, uint start, uint num); void grabPalette(byte *colors, uint start, uint num); +public: void setCursorPalette(const byte *colors, uint start, uint num); void disableCursorPalette(bool disable); diff --git a/backends/platform/wii/osystem.h b/backends/platform/wii/osystem.h index ddfa905a77..9ed4b16d79 100644 --- a/backends/platform/wii/osystem.h +++ b/backends/platform/wii/osystem.h @@ -54,7 +54,7 @@ extern void wii_memstats(void); } #endif -class OSystem_Wii : public BaseBackend { +class OSystem_Wii : public BaseBackend, public PaletteManager { private: s64 _startup_time; @@ -164,8 +164,12 @@ public: const Graphics::PixelFormat *format); virtual int16 getWidth(); virtual int16 getHeight(); + + virtual PaletteManager *getPaletteManager() { return this; } +protected: virtual void setPalette(const byte *colors, uint start, uint num); virtual void grabPalette(byte *colors, uint start, uint num); +public: virtual void setCursorPalette(const byte *colors, uint start, uint num); virtual void disableCursorPalette(bool disable); virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, |