diff options
author | Max Horn | 2009-01-22 04:35:10 +0000 |
---|---|---|
committer | Max Horn | 2009-01-22 04:35:10 +0000 |
commit | abc06ca18e69c336d701707933b4dc490dd86e94 (patch) | |
tree | a6dc57ffd954e3e85f7be813fe25d8341180c2ea /graphics/pixelformat.h | |
parent | a2c671da977acda9f9503413fb38490dcceda76d (diff) | |
download | scummvm-rg350-abc06ca18e69c336d701707933b4dc490dd86e94.tar.gz scummvm-rg350-abc06ca18e69c336d701707933b4dc490dd86e94.tar.bz2 scummvm-rg350-abc06ca18e69c336d701707933b4dc490dd86e94.zip |
Moved Graphics::PixelFormat into its own header file; turned RGBToColor etc. into methods, and added an operator==
svn-id: r35993
Diffstat (limited to 'graphics/pixelformat.h')
-rw-r--r-- | graphics/pixelformat.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/graphics/pixelformat.h b/graphics/pixelformat.h new file mode 100644 index 0000000000..bfec28fabd --- /dev/null +++ b/graphics/pixelformat.h @@ -0,0 +1,89 @@ +/* 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 GRAPHICS_PIXELFORMAT_H +#define GRAPHICS_PIXELFORMAT_H + +namespace Graphics { + + +/** + * A pixel format description. + * + * Like ColorMasks it includes the given values to create colors from RGB + * values and to retrieve RGB values from colors. + * + * Unlike ColorMasks it is not dependend on knowing the exact pixel format + * on compile time. + * + * A minor difference between ColorMasks and PixelFormat is that ColorMasks + * stores the bit count per channel in 'kFooBits', while PixelFormat stores + * the loss compared to 8 bits per channel in '#Loss'. It also doesn't + * contain mask values. + */ +struct PixelFormat { + byte bytesPerPixel; /**< Number of bytes used in the pixel format. */ + + byte rLoss, gLoss, bLoss, aLoss; /**< Precision loss of each color component. */ + byte rShift, gShift, bShift, aShift; /**< Binary left shift of each color component in the pixel value. */ + + inline bool operator==(const PixelFormat &fmt) const { + // TODO: If aLoss==8, then the value of aShift is irrelevant, and should be ignored. + return 0 == memcmp(this, &fmt, sizeof(PixelFormat)); + } + + inline uint32 RGBToColor(uint8 r, uint8 g, uint8 b) const { + return + ((0xFF >> aLoss) << aShift) | + (( r >> rLoss) << rShift) | + (( g >> gLoss) << gShift) | + (( b >> bLoss) << bShift); + } + + inline uint32 ARGBToColor(uint8 a, uint8 r, uint8 g, uint8 b) const { + return + ((a >> aLoss) << aShift) | + ((r >> rLoss) << rShift) | + ((g >> gLoss) << gShift) | + ((b >> bLoss) << bShift); + } + + inline void colorToRGB(uint32 color, uint8 &r, uint8 &g, uint8 &b) const { + r = ((color >> rShift) << rLoss) & 0xFF; + g = ((color >> gShift) << gLoss) & 0xFF; + b = ((color >> bShift) << bLoss) & 0xFF; + } + + inline void colorToARGB(uint32 color, uint8 &a, uint8 &r, uint8 &g, uint8 &b) const { + a = ((color >> aShift) << aLoss) & 0xFF; + r = ((color >> rShift) << rLoss) & 0xFF; + g = ((color >> gShift) << gLoss) & 0xFF; + b = ((color >> bShift) << bLoss) & 0xFF; + } +}; + +} // end of namespace Graphics + +#endif |