diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/blitter/8bpp_optimized.cpp | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/src/blitter/8bpp_optimized.cpp b/src/blitter/8bpp_optimized.cpp index 3fb20e74b..656f910f2 100644 --- a/src/blitter/8bpp_optimized.cpp +++ b/src/blitter/8bpp_optimized.cpp @@ -71,24 +71,28 @@ void Blitter_8bppOptimized::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Z /* 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); |