Mercurial > hg > dmlib
changeset 528:0961b6983b8e
Simplify multicolor/interlaced multicolor decoding by factoring some to a separate function.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 22 Nov 2012 02:38:12 +0200 |
parents | 49666bb544b9 |
children | 1bce06b5026f |
files | lib64gfx.c |
diffstat | 1 files changed, 15 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/lib64gfx.c Thu Nov 22 02:07:45 2012 +0200 +++ b/lib64gfx.c Thu Nov 22 02:38:12 2012 +0200 @@ -583,6 +583,18 @@ } +static inline Uint8 dmC64GetMCColor(const DMC64Image *img, const int bits, const int bank, const int scroffs) +{ + switch (bits) + { + case 0: return img->bgcolor; break; + case 1: return img->screen[bank][scroffs] >> 4; break; + case 2: return img->screen[bank][scroffs] & 15; break; + default: return img->color[bank][scroffs] & 15; break; + } +} + + static int dmC64ConvertMultiColorBMP(DMImage *screen, const DMC64Image *img) { int yc; @@ -602,16 +614,7 @@ const int scroffs = scroffsy + x; const int b = img->bitmap[0][bmoffsy + (x * 8) + yb]; const int v = 6 - ((xc * 2) & 6); - Uint8 c; - - switch ((b >> v) & 3) - { - case 0: c = img->bgcolor; break; - case 1: c = img->screen[0][scroffs] >> 4; break; - case 2: c = img->screen[0][scroffs] & 15; break; - case 3: c = img->color[0][scroffs] & 15; break; - } - + const Uint8 c = dmC64GetMCColor(img, (b >> v) & 3, 0, scroffs); *d++ = c; *d++ = c; } @@ -642,28 +645,8 @@ const int scroffs = scroffsy + x; const int bmoffs = bmoffsy + (x * 8) + yb; const int v = 6 - ((xc * 2) & 6); - const int b1 = (img->bitmap[0][bmoffs] >> v) & 3; - const int b2 = (img->bitmap[1][bmoffs] >> v) & 3; - Uint8 c1, c2; - - switch (b1) - { - case 0: c1 = img->bgcolor; break; - case 1: c1 = img->screen[0][scroffs] >> 4; break; - case 2: c1 = img->screen[0][scroffs] & 15; break; - case 3: c1 = img->color[0][scroffs] & 15; break; - } - - switch (b2) - { - case 0: c2 = img->bgcolor; break; - case 1: c2 = img->screen[img->laceBank2][scroffs] >> 4; break; - case 2: c2 = img->screen[img->laceBank2][scroffs] & 15; break; - case 3: c2 = img->color[img->laceBank2][scroffs] & 15; break; - } - - *d++ = c1; - *d++ = c2; + *d++ = dmC64GetMCColor(img, (img->bitmap[0][bmoffs] >> v) & 3, 0, scroffs); + *d++ = dmC64GetMCColor(img, (img->bitmap[1][bmoffs] >> v) & 3, img->laceBank2, scroffs); } dp += screen->pitch;