diff options
Diffstat (limited to 'engines/cine/pal.h')
-rw-r--r-- | engines/cine/pal.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/engines/cine/pal.h b/engines/cine/pal.h index 819680973c..7d7ab8e430 100644 --- a/engines/cine/pal.h +++ b/engines/cine/pal.h @@ -46,6 +46,44 @@ uint16 transformColor(uint16 baseColor, int r, int g, int b); void transformPaletteRange(uint16 *srcPal, uint16 *dstPal, int startColor, int stopColor, int r, int g, int b); void transformPaletteRange(byte *srcPal, byte *dstPal, int startColor, int stopColor, int r, int g, int b); +// This class might be used for handling Cine-engine's palettes in the future. WIP! +// All colors are represented internally as 32-bit RGBA, but +// 9-bit color palettes with 16 colors can be loaded and converted on-the-fly. +// TODO: Add palette saving in the peculiar but used 9-bit color format. +// TODO: Make use of this class. +class Palette { +public: + Palette& load24BitColors(byte *colors, uint colorCount = 256); + Palette& load9BitColors(uint16 *colors, uint colorCount = 16); + Palette& rotateRight(byte firstIndex, byte lastIndex); + Palette& saturatedAddColor(byte firstIndex, byte lastIndex, signed r, signed g, signed b); + uint getColorCount() const; + +private: + static const byte + R_INDEX = 0, + G_INDEX = 1, + B_INDEX = 2, + A_INDEX = 3; + + static const uint + COMPONENTS_PER_COLOR = 4, + BITS_PER_COMPONENT = 8, + COMPONENT_MASK = ((1 << BITS_PER_COMPONENT) - 1), + COMPONENT_MAX = COMPONENT_MASK, + COMPONENT_MUL = COMPONENT_MAX / 7; + + typedef uint32 PackedColor; + + byte& getComponent(byte colorIndex, byte componentIndex); + void setComponent(byte colorIndex, byte componentIndex, byte value); + PackedColor getColor(byte colorIndex); + void setColor(byte colorIndex, PackedColor color); + void saturatedAddColor(byte index, signed r, signed g, signed b); + + Common::Array<byte> _colors; +}; + } // End of namespace Cine #endif |