diff options
author | Bertrand Augereau | 2008-07-16 09:08:44 +0000 |
---|---|---|
committer | Bertrand Augereau | 2008-07-16 09:08:44 +0000 |
commit | bd17a600dcf86255be4e5d7d359b190e4b1351b1 (patch) | |
tree | ab51f9b2818b596b53ade08487e38fca0ddce6ec /engines | |
parent | cdade7eff3e481ef7aca404ca13138cccd920365 (diff) | |
download | scummvm-rg350-bd17a600dcf86255be4e5d7d359b190e4b1351b1.tar.gz scummvm-rg350-bd17a600dcf86255be4e5d7d359b190e4b1351b1.tar.bz2 scummvm-rg350-bd17a600dcf86255be4e5d7d359b190e4b1351b1.zip |
Split the drawVertImage function in the agos engine to make it clearer
and easier to profile
svn-id: r33083
Diffstat (limited to 'engines')
-rw-r--r-- | engines/agos/agos.h | 2 | ||||
-rw-r--r-- | engines/agos/gfx.cpp | 103 |
2 files changed, 59 insertions, 46 deletions
diff --git a/engines/agos/agos.h b/engines/agos/agos.h index 74a0b026e9..8ad5487b35 100644 --- a/engines/agos/agos.h +++ b/engines/agos/agos.h @@ -1075,6 +1075,8 @@ protected: virtual void drawImage(VC10_state *state); void drawBackGroundImage(VC10_state *state); void drawVertImage(VC10_state *state); + void drawVertImageCompressed(VC10_state *state); + void drawVertImageUncompressed(VC10_state *state); void setMoveRect(uint16 x, uint16 y, uint16 width, uint16 height); diff --git a/engines/agos/gfx.cpp b/engines/agos/gfx.cpp index 2d7d6641dc..6e91c5d94c 100644 --- a/engines/agos/gfx.cpp +++ b/engines/agos/gfx.cpp @@ -771,63 +771,74 @@ void AGOSEngine::drawBackGroundImage(VC10_state *state) { void AGOSEngine::drawVertImage(VC10_state *state) { if (state->flags & kDFCompressed) { - uint w, h; - byte *src, *dst, *dstPtr; + drawVertImageCompressed(state); + } else { + drawVertImageUncompressed(state); + } +} - state->x_skip *= 4; /* reached */ +void AGOSEngine::drawVertImageUncompressed(VC10_state *state) { + assert ((state->flags & kDFCompressed) == 0) ; - state->dl = state->width; - state->dh = state->height; + const byte *src; + byte *dst; + uint count; - vc10_skip_cols(state); + src = state->srcPtr + (state->width * state->y_skip) * 8; + dst = state->surf_addr; + state->x_skip *= 4; - dstPtr = state->surf_addr; - if (!(state->flags & kDFNonTrans) && (state->flags & 0x40)) { /* reached */ - dstPtr += vcReadVar(252); - } - w = 0; - do { + do { + for (count = 0; count != state->draw_width; count++) { byte color; + color = (src[count + state->x_skip] / 16) + state->paletteMod; + if ((state->flags & kDFNonTrans) || color) + dst[count * 2] = color | state->palette; + color = (src[count + state->x_skip] & 15) + state->paletteMod; + if ((state->flags & kDFNonTrans) || color) + dst[count * 2 + 1] = color | state->palette; + } + dst += state->surf_pitch; + src += state->width * 8; + } while (--state->draw_height); +} - src = vc10_depackColumn(state); - dst = dstPtr; +void AGOSEngine::drawVertImageCompressed(VC10_state *state) { + assert (state->flags & kDFCompressed) ; + uint w, h; + byte *src, *dst, *dstPtr; - h = 0; - do { - color = (*src / 16); - if ((state->flags & kDFNonTrans) || color != 0) - dst[0] = color | state->palette; - color = (*src & 15); - if ((state->flags & kDFNonTrans) || color != 0) - dst[1] = color | state->palette; - dst += state->surf_pitch; - src++; - } while (++h != state->draw_height); - dstPtr += 2; - } while (++w != state->draw_width); - } else { - const byte *src; - byte *dst; - uint count; + state->x_skip *= 4; /* reached */ - src = state->srcPtr + (state->width * state->y_skip) * 8; - dst = state->surf_addr; - state->x_skip *= 4; + state->dl = state->width; + state->dh = state->height; + + vc10_skip_cols(state); + dstPtr = state->surf_addr; + if (!(state->flags & kDFNonTrans) && (state->flags & 0x40)) { /* reached */ + dstPtr += vcReadVar(252); + } + w = 0; + do { + byte color; + + src = vc10_depackColumn(state); + dst = dstPtr; + + h = 0; do { - for (count = 0; count != state->draw_width; count++) { - byte color; - color = (src[count + state->x_skip] / 16) + state->paletteMod; - if ((state->flags & kDFNonTrans) || color) - dst[count * 2] = color | state->palette; - color = (src[count + state->x_skip] & 15) + state->paletteMod; - if ((state->flags & kDFNonTrans) || color) - dst[count * 2 + 1] = color | state->palette; - } + color = (*src / 16); + if ((state->flags & kDFNonTrans) || color != 0) + dst[0] = color | state->palette; + color = (*src & 15); + if ((state->flags & kDFNonTrans) || color != 0) + dst[1] = color | state->palette; dst += state->surf_pitch; - src += state->width * 8; - } while (--state->draw_height); - } + src++; + } while (++h != state->draw_height); + dstPtr += 2; + } while (++w != state->draw_width); } void AGOSEngine::drawImage(VC10_state *state) { |