|
|
|
@ -118,17 +118,27 @@ inline void Blitter_32bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel
|
|
|
|
|
|
|
|
|
|
switch (mode) {
|
|
|
|
|
case BM_COLOUR_REMAP:
|
|
|
|
|
case BM_COLOUR_REMAP_WITH_BRIGHTNESS:
|
|
|
|
|
if (src_px->a == 255) {
|
|
|
|
|
do {
|
|
|
|
|
uint m = *src_n;
|
|
|
|
|
/* In case the m-channel is zero, do not remap this pixel in any way */
|
|
|
|
|
if (m == 0) {
|
|
|
|
|
*dst = src_px->data;
|
|
|
|
|
Colour c = *src_px;
|
|
|
|
|
if (mode == BM_COLOUR_REMAP_WITH_BRIGHTNESS) c = AdjustBrightness(c, DEFAULT_BRIGHTNESS + bp->brightness_adjust);
|
|
|
|
|
*dst = c;
|
|
|
|
|
*anim = 0;
|
|
|
|
|
} else {
|
|
|
|
|
uint r = remap[GB(m, 0, 8)];
|
|
|
|
|
if (r != 0) {
|
|
|
|
|
uint8 brightness = GB(m, 8, 8);
|
|
|
|
|
if (mode == BM_COLOUR_REMAP_WITH_BRIGHTNESS) {
|
|
|
|
|
brightness = Clamp(brightness + bp->brightness_adjust, 0, 255);
|
|
|
|
|
SB(m, 8, 8, brightness);
|
|
|
|
|
}
|
|
|
|
|
*dst = this->AdjustBrightness(this->LookupColourInPalette(r), brightness);
|
|
|
|
|
}
|
|
|
|
|
*anim = r | (m & 0xFF00);
|
|
|
|
|
if (r != 0) *dst = this->AdjustBrightness(this->LookupColourInPalette(r), GB(m, 8, 8));
|
|
|
|
|
}
|
|
|
|
|
anim++;
|
|
|
|
|
dst++;
|
|
|
|
@ -139,12 +149,18 @@ inline void Blitter_32bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel
|
|
|
|
|
do {
|
|
|
|
|
uint m = *src_n;
|
|
|
|
|
if (m == 0) {
|
|
|
|
|
*dst = ComposeColourRGBANoCheck(src_px->r, src_px->g, src_px->b, src_px->a, *dst);
|
|
|
|
|
Colour c = *src_px;
|
|
|
|
|
if (mode == BM_COLOUR_REMAP_WITH_BRIGHTNESS) c = AdjustBrightness(c, DEFAULT_BRIGHTNESS + bp->brightness_adjust);
|
|
|
|
|
*dst = ComposeColourRGBANoCheck(c.r, c.g, c.b, c.a, *dst);
|
|
|
|
|
*anim = 0;
|
|
|
|
|
} else {
|
|
|
|
|
uint r = remap[GB(m, 0, 8)];
|
|
|
|
|
*anim = 0;
|
|
|
|
|
if (r != 0) *dst = ComposeColourPANoCheck(this->AdjustBrightness(this->LookupColourInPalette(r), GB(m, 8, 8)), src_px->a, *dst);
|
|
|
|
|
if (r != 0) {
|
|
|
|
|
uint8 brightness = GB(m, 8, 8);
|
|
|
|
|
if (mode == BM_COLOUR_REMAP_WITH_BRIGHTNESS) brightness = Clamp(brightness + bp->brightness_adjust, 0, 255);
|
|
|
|
|
*dst = ComposeColourPANoCheck(this->AdjustBrightness(this->LookupColourInPalette(r), brightness), src_px->a, *dst);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
anim++;
|
|
|
|
|
dst++;
|
|
|
|
@ -234,17 +250,27 @@ inline void Blitter_32bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel
|
|
|
|
|
if (fast_path || (src_px->a == 255 && (sprite_flags & SF_NO_ANIM))) {
|
|
|
|
|
do {
|
|
|
|
|
*anim++ = 0;
|
|
|
|
|
*dst++ = src_px->data;
|
|
|
|
|
Colour c = *src_px;
|
|
|
|
|
if (mode == BM_NORMAL_WITH_BRIGHTNESS) c = AdjustBrightness(c, DEFAULT_BRIGHTNESS + bp->brightness_adjust);
|
|
|
|
|
*dst++ = c;
|
|
|
|
|
src_px++;
|
|
|
|
|
src_n++;
|
|
|
|
|
} while (--n != 0);
|
|
|
|
|
} else if (src_px->a == 255) {
|
|
|
|
|
do {
|
|
|
|
|
/* Compiler assumes pointer aliasing, can't optimise this on its own */
|
|
|
|
|
uint m = GB(*src_n, 0, 8);
|
|
|
|
|
uint16 mv = *src_n;
|
|
|
|
|
uint m = GB(mv, 0, 8);
|
|
|
|
|
/* Above PALETTE_ANIM_START is palette animation */
|
|
|
|
|
*anim++ = *src_n;
|
|
|
|
|
*dst++ = (m >= PALETTE_ANIM_START) ? this->AdjustBrightness(this->LookupColourInPalette(m), GB(*src_n, 8, 8)) : src_px->data;
|
|
|
|
|
if (m >= PALETTE_ANIM_START) {
|
|
|
|
|
if (mode == BM_NORMAL_WITH_BRIGHTNESS) SB(mv, 8, 8, Clamp(GB(mv, 8, 8) + bp->brightness_adjust, 0, 255));
|
|
|
|
|
*dst++ = this->AdjustBrightness(this->LookupColourInPalette(m), GB(mv, 8, 8));
|
|
|
|
|
} else if (mode == BM_NORMAL_WITH_BRIGHTNESS) {
|
|
|
|
|
*dst++ = AdjustBrightness(src_px->data, DEFAULT_BRIGHTNESS + bp->brightness_adjust);
|
|
|
|
|
} else {
|
|
|
|
|
*dst++ = src_px->data;
|
|
|
|
|
}
|
|
|
|
|
*anim++ = mv;
|
|
|
|
|
src_px++;
|
|
|
|
|
src_n++;
|
|
|
|
|
} while (--n != 0);
|
|
|
|
@ -253,9 +279,13 @@ inline void Blitter_32bppAnim::Draw(const Blitter::BlitterParams *bp, ZoomLevel
|
|
|
|
|
uint m = GB(*src_n, 0, 8);
|
|
|
|
|
*anim++ = 0;
|
|
|
|
|
if (m >= PALETTE_ANIM_START) {
|
|
|
|
|
*dst = ComposeColourPANoCheck(this->AdjustBrightness(this->LookupColourInPalette(m), GB(*src_n, 8, 8)), src_px->a, *dst);
|
|
|
|
|
uint8 brightness = GB(*src_n, 8, 8);
|
|
|
|
|
if (mode == BM_NORMAL_WITH_BRIGHTNESS) brightness = Clamp(brightness + bp->brightness_adjust, 0, 255);
|
|
|
|
|
*dst = ComposeColourPANoCheck(this->AdjustBrightness(this->LookupColourInPalette(m), brightness), src_px->a, *dst);
|
|
|
|
|
} else {
|
|
|
|
|
*dst = ComposeColourRGBANoCheck(src_px->r, src_px->g, src_px->b, src_px->a, *dst);
|
|
|
|
|
Colour c = *src_px;
|
|
|
|
|
if (mode == BM_NORMAL_WITH_BRIGHTNESS) c = AdjustBrightness(c, DEFAULT_BRIGHTNESS + bp->brightness_adjust);
|
|
|
|
|
*dst = ComposeColourRGBANoCheck(c.r, c.g, c.b, c.a, *dst);
|
|
|
|
|
}
|
|
|
|
|
dst++;
|
|
|
|
|
src_px++;
|
|
|
|
@ -286,6 +316,17 @@ void Blitter_32bppAnim::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomL
|
|
|
|
|
switch (mode) {
|
|
|
|
|
default: NOT_REACHED();
|
|
|
|
|
|
|
|
|
|
case BM_COLOUR_REMAP_WITH_BRIGHTNESS:
|
|
|
|
|
if (!(sprite_flags & SF_NO_REMAP)) {
|
|
|
|
|
Draw<BM_COLOUR_REMAP_WITH_BRIGHTNESS, false>(bp, zoom);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
/* FALL THROUGH */
|
|
|
|
|
|
|
|
|
|
case BM_NORMAL_WITH_BRIGHTNESS:
|
|
|
|
|
Draw<BM_NORMAL_WITH_BRIGHTNESS, false>(bp, zoom);
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
case BM_COLOUR_REMAP:
|
|
|
|
|
if (!(sprite_flags & SF_NO_REMAP)) {
|
|
|
|
|
Draw<BM_COLOUR_REMAP, false>(bp, zoom);
|
|
|
|
|