[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