diff options
Diffstat (limited to 'sword2/driver/animation.cpp')
-rw-r--r-- | sword2/driver/animation.cpp | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/sword2/driver/animation.cpp b/sword2/driver/animation.cpp index e7712a43f7..2f097210fe 100644 --- a/sword2/driver/animation.cpp +++ b/sword2/driver/animation.cpp @@ -106,7 +106,7 @@ bool AnimationState::init(const char *name) { lut2 = lookup[1]; lutcalcnum = (BITDEPTH + palettes[palnum].end + 2) / (palettes[palnum].end + 2); #else - buildLookup2(); + buildLookup(); overlay = (NewGuiColor*)calloc(640 * 400, sizeof(NewGuiColor)); _vm->_system->show_overlay(); #endif @@ -220,14 +220,13 @@ bool AnimationState::checkPaletteSwitch() { #else -bool AnimationState::lookupInit = false; -NewGuiColor AnimationState::lookup2[BITDEPTH * BITDEPTH * 256]; +NewGuiColor *AnimationState::lookup = 0; -void AnimationState::buildLookup2() { - if (lookupInit) +void AnimationState::buildLookup() { + if (lookup) return; - lookupInit = true; + lookup = (NewGuiColor *)calloc(BITDEPTH * BITDEPTH * 256, sizeof(NewGuiColor)); int y, cb, cr; int r, g, b; @@ -240,20 +239,14 @@ void AnimationState::buildLookup2() { g = ((y - 16) * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256; b = ((y - 16) * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256; - if (r < 0) - r = 0; - if (r > 255) - r = 255; - if (g < 0) - g = 0; - if (g > 255) - g = 255; - if (b < 0) - b = 0; - if (b > 255) - b = 255; - - lookup2[pos++] = _vm->_system->RGBToColor(r, g, b); + if (r < 0) r = 0; + else if (r > 255) r = 255; + if (g < 0) g = 0; + else if (g > 255) g = 255; + if (b < 0) b = 0; + else if (b > 255) b = 255; + + lookup[pos++] = _vm->_system->RGBToColor(r, g, b); } } } @@ -372,7 +365,7 @@ bool AnimationState::decodeFrame() { if ((bgSoundStream == NULL) || (bgSoundStream->getSamplesPlayed() * 12 / bgSoundStream->getRate()) < (framenum+3)){ - plotYUV(lookup2, sequence_i->width, sequence_i->height, info->display_fbuf->buf); + plotYUV(lookup, sequence_i->width, sequence_i->height, info->display_fbuf->buf); if (bgSoundStream) { while ((bgSoundStream->getSamplesPlayed() * 12 / bgSoundStream->getRate()) < framenum + 1) |