[Scummvm-cvs-logs] SF.net SVN: scummvm:[34875] scummvm/trunk
lordhoto at users.sourceforge.net
lordhoto at users.sourceforge.net
Mon Nov 3 14:45:00 CET 2008
Revision: 34875
http://scummvm.svn.sourceforge.net/scummvm/?rev=34875&view=rev
Author: lordhoto
Date: 2008-11-03 13:44:59 +0000 (Mon, 03 Nov 2008)
Log Message:
-----------
Committed my patch #2216641 "GRAPHICS: PixelFormat introduction".
Modified Paths:
--------------
scummvm/trunk/backends/platform/sdl/graphics.cpp
scummvm/trunk/backends/platform/sdl/sdl.h
scummvm/trunk/common/system.cpp
scummvm/trunk/common/system.h
scummvm/trunk/graphics/colormasks.h
scummvm/trunk/graphics/scaler/intern.h
scummvm/trunk/graphics/scaler/thumbnail_intern.cpp
scummvm/trunk/graphics/scaler.cpp
Modified: scummvm/trunk/backends/platform/sdl/graphics.cpp
===================================================================
--- scummvm/trunk/backends/platform/sdl/graphics.cpp 2008-11-03 11:13:38 UTC (rev 34874)
+++ scummvm/trunk/backends/platform/sdl/graphics.cpp 2008-11-03 13:44:59 UTC (rev 34875)
@@ -396,6 +396,18 @@
if (_overlayscreen == NULL)
error("allocating _overlayscreen failed");
+ _overlayFormat.bytesPerPixel = _overlayscreen->format->BytesPerPixel;
+
+ _overlayFormat.rLoss = _overlayscreen->format->Rloss;
+ _overlayFormat.gLoss = _overlayscreen->format->Gloss;
+ _overlayFormat.bLoss = _overlayscreen->format->Bloss;
+ _overlayFormat.aLoss = _overlayscreen->format->Aloss;
+
+ _overlayFormat.rShift = _overlayscreen->format->Rshift;
+ _overlayFormat.gShift = _overlayscreen->format->Gshift;
+ _overlayFormat.bShift = _overlayscreen->format->Bshift;
+ _overlayFormat.aShift = _overlayscreen->format->Ashift;
+
_tmpscreen2 = SDL_CreateRGBSurface(SDL_SWSURFACE, _overlayWidth + 3, _overlayHeight + 3,
16,
_hwscreen->format->Rmask,
Modified: scummvm/trunk/backends/platform/sdl/sdl.h
===================================================================
--- scummvm/trunk/backends/platform/sdl/sdl.h 2008-11-03 11:13:38 UTC (rev 34874)
+++ scummvm/trunk/backends/platform/sdl/sdl.h 2008-11-03 13:44:59 UTC (rev 34875)
@@ -176,6 +176,7 @@
void deleteMutex(MutexRef mutex);
// Overlay
+ virtual Graphics::PixelFormat getOverlayFormat() const { return _overlayFormat; }
virtual void showOverlay();
virtual void hideOverlay();
virtual void clearOverlay();
@@ -246,6 +247,7 @@
SDL_Surface *_overlayscreen;
int _overlayWidth, _overlayHeight;
bool _overlayVisible;
+ Graphics::PixelFormat _overlayFormat;
// Audio
int _samplesPerSec;
Modified: scummvm/trunk/common/system.cpp
===================================================================
--- scummvm/trunk/common/system.cpp 2008-11-03 11:13:38 UTC (rev 34874)
+++ scummvm/trunk/common/system.cpp 2008-11-03 13:44:59 UTC (rev 34875)
@@ -62,11 +62,11 @@
}
OverlayColor OSystem::RGBToColor(uint8 r, uint8 g, uint8 b) {
- return ::RGBToColor<ColorMasks<565> >(r, g, b);
+ return Graphics::RGBToColor<Graphics::ColorMasks<565> >(r, g, b);
}
void OSystem::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) {
- ::colorToRGB<ColorMasks<565> >(color, r, g, b);
+ Graphics::colorToRGB<Graphics::ColorMasks<565> >(color, r, g, b);
}
OverlayColor OSystem::ARGBToColor(uint8 a, uint8 r, uint8 g, uint8 b) {
Modified: scummvm/trunk/common/system.h
===================================================================
--- scummvm/trunk/common/system.h 2008-11-03 11:13:38 UTC (rev 34874)
+++ scummvm/trunk/common/system.h 2008-11-03 13:44:59 UTC (rev 34875)
@@ -31,6 +31,8 @@
#include "common/noncopyable.h"
#include "common/rect.h"
+#include "graphics/colormasks.h"
+
namespace Audio {
class Mixer;
}
@@ -571,6 +573,12 @@
virtual void hideOverlay() = 0;
/**
+ * Returns the pixel format description of the overlay.
+ * @see Graphics::PixelFormat
+ */
+ virtual Graphics::PixelFormat getOverlayFormat() const = 0;
+
+ /**
* Reset the overlay.
*
* After calling this method while the overlay mode is active, the user
Modified: scummvm/trunk/graphics/colormasks.h
===================================================================
--- scummvm/trunk/graphics/colormasks.h 2008-11-03 11:13:38 UTC (rev 34874)
+++ scummvm/trunk/graphics/colormasks.h 2008-11-03 13:44:59 UTC (rev 34875)
@@ -26,6 +26,8 @@
#ifndef GRAPHICS_COLORMASKS_H
#define GRAPHICS_COLORMASKS_H
+namespace Graphics {
+
template<int bitFormat>
struct ColorMasks {
};
@@ -251,4 +253,76 @@
b = ((color & T::kBlueMask) >> T::kBlueShift) << (8 - T::kBlueBits);
}
+/**
+ * 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'.
+ */
+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. */
+
+ uint32 rMask, gMask, bMask, aMask; /**< Binary mask used to retrieve individual color values. */
+};
+
+template<class Mask>
+PixelFormat createPixelFormatFromMask() {
+ PixelFormat format;
+
+ format.bytesPerPixel = Mask::kBytesPerPixel;
+
+ format.rLoss = 8 - Mask::kRedBits;
+ format.gLoss = 8 - Mask::kGreenBits;
+ format.bLoss = 8 - Mask::kBlueBits;
+ format.aLoss = 8 - Mask::kAlphaBits;
+
+ format.rShift = Mask::kRedShift;
+ format.gShift = Mask::kGreenShift;
+ format.bShift = Mask::kBlueShift;
+ format.aShift = Mask::kAlphaShift;
+
+ return format;
+}
+
+inline uint32 RGBToColor(uint8 r, uint8 g, uint8 b, const PixelFormat &fmt) {
+ return
+ ((0xFF >> fmt.aLoss) << fmt.aShift) |
+ (( r >> fmt.rLoss) << fmt.rShift) |
+ (( g >> fmt.gLoss) << fmt.gShift) |
+ (( b >> fmt.bLoss) << fmt.bShift);
+}
+
+inline uint32 ARGBToColor(uint8 a, uint8 r, uint8 g, uint8 b, const PixelFormat &fmt) {
+ return
+ ((a >> fmt.aLoss) << fmt.aShift) |
+ ((r >> fmt.rLoss) << fmt.rShift) |
+ ((g >> fmt.gLoss) << fmt.gShift) |
+ ((b >> fmt.bLoss) << fmt.bShift);
+}
+
+inline void colorToRGB(uint32 color, uint8 &r, uint8 &g, uint8 &b, const PixelFormat &fmt) {
+ r = ((color >> fmt.rShift) << fmt.rLoss) & 0xFF;
+ g = ((color >> fmt.gShift) << fmt.gLoss) & 0xFF;
+ b = ((color >> fmt.bShift) << fmt.bLoss) & 0xFF;
+}
+
+inline void colorToARGB(uint32 color, uint8 &a, uint8 &r, uint8 &g, uint8 &b, const PixelFormat &fmt) {
+ a = ((color >> fmt.aShift) << fmt.aLoss) & 0xFF;
+ r = ((color >> fmt.rShift) << fmt.rLoss) & 0xFF;
+ g = ((color >> fmt.gShift) << fmt.gLoss) & 0xFF;
+ b = ((color >> fmt.bShift) << fmt.bLoss) & 0xFF;
+}
+
+} // end of namespace Graphics
+
#endif
Modified: scummvm/trunk/graphics/scaler/intern.h
===================================================================
--- scummvm/trunk/graphics/scaler/intern.h 2008-11-03 11:13:38 UTC (rev 34874)
+++ scummvm/trunk/graphics/scaler/intern.h 2008-11-03 13:44:59 UTC (rev 34875)
@@ -30,12 +30,12 @@
#include "graphics/colormasks.h"
-#define highBits ColorMasks<bitFormat>::highBits
-#define lowBits ColorMasks<bitFormat>::lowBits
-#define qhighBits ColorMasks<bitFormat>::qhighBits
-#define qlowBits ColorMasks<bitFormat>::qlowBits
-#define redblueMask ColorMasks<bitFormat>::kRedBlueMask
-#define greenMask ColorMasks<bitFormat>::kGreenMask
+#define highBits Graphics::ColorMasks<bitFormat>::highBits
+#define lowBits Graphics::ColorMasks<bitFormat>::lowBits
+#define qhighBits Graphics::ColorMasks<bitFormat>::qhighBits
+#define qlowBits Graphics::ColorMasks<bitFormat>::qlowBits
+#define redblueMask Graphics::ColorMasks<bitFormat>::kRedBlueMask
+#define greenMask Graphics::ColorMasks<bitFormat>::kGreenMask
/**
Modified: scummvm/trunk/graphics/scaler/thumbnail_intern.cpp
===================================================================
--- scummvm/trunk/graphics/scaler/thumbnail_intern.cpp 2008-11-03 11:13:38 UTC (rev 34874)
+++ scummvm/trunk/graphics/scaler/thumbnail_intern.cpp 2008-11-03 13:44:59 UTC (rev 34875)
@@ -118,7 +118,7 @@
g = palette[((uint8*)screen->pixels)[y * screen->pitch + x] * 4 + 1];
b = palette[((uint8*)screen->pixels)[y * screen->pitch + x] * 4 + 2];
- ((uint16*)surf->pixels)[y * surf->w + x] = RGBToColor<ColorMasks<565> >(r, g, b);
+ ((uint16*)surf->pixels)[y * surf->w + x] = Graphics::RGBToColor<Graphics::ColorMasks<565> >(r, g, b);
}
}
@@ -209,7 +209,7 @@
g = palette[pixels[y * w + x] * 3 + 1];
b = palette[pixels[y * w + x] * 3 + 2];
- ((uint16 *)screen.pixels)[y * screen.w + x] = RGBToColor<ColorMasks<565> >(r, g, b);
+ ((uint16 *)screen.pixels)[y * screen.w + x] = Graphics::RGBToColor<Graphics::ColorMasks<565> >(r, g, b);
}
}
Modified: scummvm/trunk/graphics/scaler.cpp
===================================================================
--- scummvm/trunk/graphics/scaler.cpp 2008-11-03 11:13:38 UTC (rev 34874)
+++ scummvm/trunk/graphics/scaler.cpp 2008-11-03 13:44:59 UTC (rev 34875)
@@ -105,9 +105,9 @@
gBitFormat = BitFormat;
#ifndef DISABLE_HQ_SCALERS
if (gBitFormat == 555)
- InitLUT<ColorMasks<555> >();
+ InitLUT<Graphics::ColorMasks<555> >();
if (gBitFormat == 565)
- InitLUT<ColorMasks<565> >();
+ InitLUT<Graphics::ColorMasks<565> >();
#endif
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list