diff options
author | Max Horn | 2010-03-08 10:29:35 +0000 |
---|---|---|
committer | Max Horn | 2010-03-08 10:29:35 +0000 |
commit | d239d5c2f82c1e2dea09ed27475ec136a7ea3b5f (patch) | |
tree | febd0bbd175c1268c17cff46830095a4d9ee3547 /graphics/scaler | |
parent | 28c6c600d45b4ce16f13d08cfc7c9fbcc8461a63 (diff) | |
download | scummvm-rg350-d239d5c2f82c1e2dea09ed27475ec136a7ea3b5f.tar.gz scummvm-rg350-d239d5c2f82c1e2dea09ed27475ec136a7ea3b5f.tar.bz2 scummvm-rg350-d239d5c2f82c1e2dea09ed27475ec136a7ea3b5f.zip |
SCALERS: Change 'bitformat' template params to 'colormasks';
get rid of some #defines
svn-id: r48187
Diffstat (limited to 'graphics/scaler')
-rw-r--r-- | graphics/scaler/2xsai.cpp | 14 | ||||
-rw-r--r-- | graphics/scaler/aspect.cpp | 34 | ||||
-rw-r--r-- | graphics/scaler/downscaler.cpp | 8 | ||||
-rw-r--r-- | graphics/scaler/intern.h | 26 |
4 files changed, 38 insertions, 44 deletions
diff --git a/graphics/scaler/2xsai.cpp b/graphics/scaler/2xsai.cpp index 64c989c629..165734ba10 100644 --- a/graphics/scaler/2xsai.cpp +++ b/graphics/scaler/2xsai.cpp @@ -41,12 +41,12 @@ static inline int GetResult(uint32 A, uint32 B, uint32 C, uint32 D) { return (y>>1) - (x>>1); } -#define interpolate_1_1 interpolate16_1_1<Graphics::ColorMasks<bitFormat> > -#define interpolate_3_1 interpolate16_3_1<Graphics::ColorMasks<bitFormat> > -#define interpolate_6_1_1 interpolate16_6_1_1<Graphics::ColorMasks<bitFormat> > -#define interpolate_1_1_1_1 interpolate16_1_1_1_1<Graphics::ColorMasks<bitFormat> > +#define interpolate_1_1 interpolate16_1_1<ColorMask> +#define interpolate_3_1 interpolate16_3_1<ColorMask> +#define interpolate_6_1_1 interpolate16_6_1_1<ColorMask> +#define interpolate_1_1_1_1 interpolate16_1_1_1_1<ColorMask> -template<int bitFormat> +template<typename ColorMask> void Super2xSaITemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { const uint16 *bP; uint16 *dP; @@ -155,7 +155,7 @@ void Super2xSaITemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uin MAKE_WRAPPER(Super2xSaI) -template<int bitFormat> +template<typename ColorMask> void SuperEagleTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { const uint16 *bP; uint16 *dP; @@ -260,7 +260,7 @@ void SuperEagleTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uin MAKE_WRAPPER(SuperEagle) -template<int bitFormat> +template<typename ColorMask> void _2xSaITemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { const uint16 *bP; uint16 *dP; diff --git a/graphics/scaler/aspect.cpp b/graphics/scaler/aspect.cpp index 5f8f5f8279..3707f39b60 100644 --- a/graphics/scaler/aspect.cpp +++ b/graphics/scaler/aspect.cpp @@ -36,28 +36,28 @@ #if ASPECT_MODE == kSlowAndPerfectAspectMode -template<int bitFormat, int scale> +template<typename ColorMask, int scale> static inline uint16 interpolate5(uint16 A, uint16 B) { - uint16 r = (uint16)(((A & redblueMask & 0xFF00) * scale + (B & redblueMask & 0xFF00) * (5 - scale)) / 5); - uint16 g = (uint16)(((A & greenMask) * scale + (B & greenMask) * (5 - scale)) / 5); - uint16 b = (uint16)(((A & redblueMask & 0x00FF) * scale + (B & redblueMask & 0x00FF) * (5 - scale)) / 5); + uint16 r = (uint16)(((A & ColorMask::kRedBlueMask & 0xFF00) * scale + (B & ColorMask::kRedBlueMask & 0xFF00) * (5 - scale)) / 5); + uint16 g = (uint16)(((A & ColorMask::kGreenMask) * scale + (B & ColorMask::kGreenMask) * (5 - scale)) / 5); + uint16 b = (uint16)(((A & ColorMask::kRedBlueMask & 0x00FF) * scale + (B & ColorMask::kRedBlueMask & 0x00FF) * (5 - scale)) / 5); - return (uint16)((r & redblueMask & 0xFF00) | (g & greenMask) | (b & redblueMask & 0x00FF)); + return (uint16)((r & ColorMask::kRedBlueMask & 0xFF00) | (g & ColorMask::kGreenMask) | (b & ColorMask::kRedBlueMask & 0x00FF)); } -template<int bitFormat, int scale> +template<typename ColorMask, int scale> static inline void interpolate5Line(uint16 *dst, const uint16 *srcA, const uint16 *srcB, int width) { // Accurate but slightly slower code while (width--) { - *dst++ = interpolate5<bitFormat, scale>(*srcA++, *srcB++); + *dst++ = interpolate5<ColorMask, scale>(*srcA++, *srcB++); } } #endif #if ASPECT_MODE == kFastAndNiceAspectMode -template<int bitFormat, int scale> +template<typename ColorMask, int scale> static inline void interpolate5Line(uint16 *dst, const uint16 *srcA, const uint16 *srcB, int width) { // For efficiency reasons we blit two pixels at a time, so it is important // that makeRectStretchable() guarantees that the width is even and that @@ -78,11 +78,11 @@ static inline void interpolate5Line(uint16 *dst, const uint16 *srcA, const uint1 uint32 *d = (uint32 *)dst; if (scale == 1) { while (width--) { - *d++ = interpolate32_3_1<bitFormat>(*sB++, *sA++); + *d++ = interpolate32_3_1<ColorMask>(*sB++, *sA++); } } else { while (width--) { - *d++ = interpolate32_1_1<bitFormat>(*sB++, *sA++); + *d++ = interpolate32_1_1<ColorMask>(*sB++, *sA++); } } } @@ -133,7 +133,7 @@ void makeRectStretchable(int &x, int &y, int &w, int &h) { * srcY + height - 1, and it should be stretched to Y coordinates srcY * through real2Aspect(srcY + height - 1). */ -template<int bitFormat> +template<typename ColorMask> int stretch200To240(uint8 *buf, uint32 pitch, int width, int height, int srcX, int srcY, int origSrcY) { int maxDstY = real2Aspect(origSrcY + height - 1); int y; @@ -156,16 +156,16 @@ int stretch200To240(uint8 *buf, uint32 pitch, int width, int height, int srcX, i memcpy(dstPtr, srcPtr, width * 2); break; case 1: - interpolate5Line<bitFormat, 1>((uint16 *)dstPtr, (const uint16 *)(srcPtr - pitch), (const uint16 *)srcPtr, width); + interpolate5Line<ColorMask, 1>((uint16 *)dstPtr, (const uint16 *)(srcPtr - pitch), (const uint16 *)srcPtr, width); break; case 2: - interpolate5Line<bitFormat, 2>((uint16 *)dstPtr, (const uint16 *)(srcPtr - pitch), (const uint16 *)srcPtr, width); + interpolate5Line<ColorMask, 2>((uint16 *)dstPtr, (const uint16 *)(srcPtr - pitch), (const uint16 *)srcPtr, width); break; case 3: - interpolate5Line<bitFormat, 2>((uint16 *)dstPtr, (const uint16 *)srcPtr, (const uint16 *)(srcPtr - pitch), width); + interpolate5Line<ColorMask, 2>((uint16 *)dstPtr, (const uint16 *)srcPtr, (const uint16 *)(srcPtr - pitch), width); break; case 4: - interpolate5Line<bitFormat, 1>((uint16 *)dstPtr, (const uint16 *)srcPtr, (const uint16 *)(srcPtr - pitch), width); + interpolate5Line<ColorMask, 1>((uint16 *)dstPtr, (const uint16 *)srcPtr, (const uint16 *)(srcPtr - pitch), width); break; } #endif @@ -177,8 +177,8 @@ int stretch200To240(uint8 *buf, uint32 pitch, int width, int height, int srcX, i int stretch200To240(uint8 *buf, uint32 pitch, int width, int height, int srcX, int srcY, int origSrcY) { if (gBitFormat == 565) - return stretch200To240<565>(buf, pitch, width, height, srcX, srcY, origSrcY); + return stretch200To240<Graphics::ColorMasks<565> >(buf, pitch, width, height, srcX, srcY, origSrcY); else // gBitFormat == 555 - return stretch200To240<555>(buf, pitch, width, height, srcX, srcY, origSrcY); + return stretch200To240<Graphics::ColorMasks<555> >(buf, pitch, width, height, srcX, srcY, origSrcY); } diff --git a/graphics/scaler/downscaler.cpp b/graphics/scaler/downscaler.cpp index 21ba1ce36d..6f94f1f34b 100644 --- a/graphics/scaler/downscaler.cpp +++ b/graphics/scaler/downscaler.cpp @@ -41,7 +41,7 @@ void DownscaleAllByHalf(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uin #else -template<int bitFormat> +template<typename ColorMask> void DownscaleAllByHalfTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { uint8 *work; uint16 srcPitch16 = (uint16)(srcPitch / sizeof(uint16)); @@ -55,7 +55,7 @@ void DownscaleAllByHalfTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dst uint16 color2 = *(((const uint16 *)srcPtr) + (i + 1)); uint16 color3 = *(((const uint16 *)srcPtr) + (i + srcPitch16)); uint16 color4 = *(((const uint16 *)srcPtr) + (i + srcPitch16 + 1)); - *(((uint16 *)work) + 0) = interpolate16_1_1_1_1<Graphics::ColorMasks<bitFormat> >(color1, color2, color3, color4); + *(((uint16 *)work) + 0) = interpolate16_1_1_1_1<ColorMask>(color1, color2, color3, color4); work += sizeof(uint16); } @@ -72,7 +72,7 @@ MAKE_WRAPPER(DownscaleAllByHalf) * This filter (down)scales the source image horizontally by a factor of 1/2. * For example, a 320x200 image is scaled to 160x200. */ -template<int bitFormat> +template<typename ColorMask> void DownscaleHorizByHalfTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { uint16 *work; @@ -87,7 +87,7 @@ void DownscaleHorizByHalfTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *d for (int i = 0; i < width; i += 2) { uint16 color1 = *(((const uint16 *)(const void *)srcPtr) + i); uint16 color2 = *(((const uint16 *)(const void *)srcPtr) + (i + 1)); - *work++ = interpolate32_1_1<bitFormat>(color1, color2); + *work++ = interpolate32_1_1<ColorMask>(color1, color2); } srcPtr += srcPitch; dstPtr += dstPitch; diff --git a/graphics/scaler/intern.h b/graphics/scaler/intern.h index 8da7b42e39..706f0a11d0 100644 --- a/graphics/scaler/intern.h +++ b/graphics/scaler/intern.h @@ -30,22 +30,16 @@ #include "graphics/colormasks.h" -#define kHighBitsMask Graphics::ColorMasks<bitFormat>::kHighBitsMask -#define kLowBitsMask Graphics::ColorMasks<bitFormat>::kLowBitsMask -#define qhighBits Graphics::ColorMasks<bitFormat>::qhighBits -#define qlowBits Graphics::ColorMasks<bitFormat>::qlowBits -#define redblueMask Graphics::ColorMasks<bitFormat>::kRedBlueMask -#define greenMask Graphics::ColorMasks<bitFormat>::kGreenMask - - /** * Interpolate two 16 bit pixel *pairs* at once with equal weights 1. * In particular, p1 and p2 can contain two pixels each in the upper * and lower halves. */ -template<int bitFormat> +template<typename ColorMask> static inline uint32 interpolate32_1_1(uint32 p1, uint32 p2) { - return (((p1 & kHighBitsMask) >> 1) + ((p2 & kHighBitsMask) >> 1) + (p1 & p2 & kLowBitsMask)); + return (((p1 & ColorMask::kHighBitsMask) >> 1) + + ((p2 & ColorMask::kHighBitsMask) >> 1) + + (p1 & p2 & ColorMask::kLowBitsMask)); } /** @@ -53,12 +47,12 @@ static inline uint32 interpolate32_1_1(uint32 p1, uint32 p2) { * In particular, p1 and p2 can contain two pixels/each in the upper * and lower halves. */ -template<int bitFormat> +template<typename ColorMask> static inline uint32 interpolate32_3_1(uint32 p1, uint32 p2) { - register uint32 x = ((p1 & qhighBits) >> 2) * 3 + ((p2 & qhighBits) >> 2); - register uint32 y = ((p1 & qlowBits) * 3 + (p2 & qlowBits)) >> 2; + register uint32 x = ((p1 & ColorMask::qhighBits) >> 2) * 3 + ((p2 & ColorMask::qhighBits) >> 2); + register uint32 y = ((p1 & ColorMask::qlowBits) * 3 + (p2 & ColorMask::qlowBits)) >> 2; - y &= qlowBits; + y &= ColorMask::qlowBits; return x + y; } @@ -227,9 +221,9 @@ extern "C" uint32 *RGBtoYUV; #define MAKE_WRAPPER(FUNC) \ void FUNC(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { \ if (gBitFormat == 565) \ - FUNC ## Template<565>(srcPtr, srcPitch, dstPtr, dstPitch, width, height); \ + FUNC ## Template<Graphics::ColorMasks<565> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height); \ else \ - FUNC ## Template<555>(srcPtr, srcPitch, dstPtr, dstPitch, width, height); \ + FUNC ## Template<Graphics::ColorMasks<555> >(srcPtr, srcPitch, dstPtr, dstPitch, width, height); \ } /** Specifies the currently active 16bit pixel format, 555 or 565. */ |