--- a/src/blitter/8bpp_optimized.cpp Sat Jun 21 18:59:15 2008 +0000
+++ b/src/blitter/8bpp_optimized.cpp Sat Jun 21 20:58:34 2008 +0000
@@ -71,24 +71,28 @@
/* Skip transparent pixels */
dst += trans;
width -= trans;
- if (width <= 0) continue;
+ if (width <= 0 || pixels == 0) continue;
pixels = min<uint>(pixels, (uint)width);
width -= pixels;
switch (mode) {
- case BM_COLOUR_REMAP:
- for (uint x = 0; x < pixels; x++) {
- if (bp->remap[*src] != 0) *dst = bp->remap[*src];
+ case BM_COLOUR_REMAP: {
+ const uint8 *remap = bp->remap;
+ do {
+ uint m = remap[*src];
+ if (m != 0) *dst = m;
dst++; src++;
- }
- break;
+ } while (--pixels != 0);
+ } break;
- case BM_TRANSPARENT:
- for (uint x = 0; x < pixels; x++) {
- *dst = bp->remap[*dst];
- dst++; src++;
- }
- break;
+ case BM_TRANSPARENT: {
+ const uint8 *remap = bp->remap;
+ src += pixels;
+ do {
+ *dst = remap[*dst];
+ dst++;
+ } while (--pixels != 0);
+ } break;
default:
memcpy(dst, src, pixels);