diff options
author | Willem Jan Palenstijn | 2009-03-08 20:17:01 +0000 |
---|---|---|
committer | Willem Jan Palenstijn | 2009-03-08 20:17:01 +0000 |
commit | ced40b2266976d0129294a1c5925b7d88024b2de (patch) | |
tree | 61b4339e05c997d91a3491aaeac2a978e86e9997 /engines/sci/gfx/resource/sci_resmgr.cpp | |
parent | 85f6f204195c0859ecf4119e63d5f53b91fb5684 (diff) | |
download | scummvm-rg350-ced40b2266976d0129294a1c5925b7d88024b2de.tar.gz scummvm-rg350-ced40b2266976d0129294a1c5925b7d88024b2de.tar.bz2 scummvm-rg350-ced40b2266976d0129294a1c5925b7d88024b2de.zip |
Use new Palette class to manager pixmap palettes.
There are some remaining regressions with text colour in SCI1 games,
but overall it should fix more than it breaks.
svn-id: r39242
Diffstat (limited to 'engines/sci/gfx/resource/sci_resmgr.cpp')
-rw-r--r-- | engines/sci/gfx/resource/sci_resmgr.cpp | 55 |
1 files changed, 24 insertions, 31 deletions
diff --git a/engines/sci/gfx/resource/sci_resmgr.cpp b/engines/sci/gfx/resource/sci_resmgr.cpp index 97ecfb3d1d..c3646eb6b4 100644 --- a/engines/sci/gfx/resource/sci_resmgr.cpp +++ b/engines/sci/gfx/resource/sci_resmgr.cpp @@ -101,31 +101,25 @@ int gfxr_interpreter_calculate_pic(gfx_resstate_t *state, gfxr_pic_t *scaled_pic if (state->version >= SCI_VERSION_01_VGA) { if (need_unscaled) { if (state->version == SCI_VERSION_1_1) - gfxr_draw_pic11(unscaled_pic, flags, default_palette, res->size, res->data, &basic_style, res->id, - state->static_palette, state->static_palette_entries); + gfxr_draw_pic11(unscaled_pic, flags, default_palette, res->size, res->data, &basic_style, res->id, state->static_palette); else - gfxr_draw_pic01(unscaled_pic, flags, default_palette, res->size, res->data, &basic_style, res->id, 1, - state->static_palette, state->static_palette_entries); + gfxr_draw_pic01(unscaled_pic, flags, default_palette, res->size, res->data, &basic_style, res->id, 1, state->static_palette); } if (scaled_pic && scaled_pic->undithered_buffer) memcpy(scaled_pic->visual_map->index_data, scaled_pic->undithered_buffer, scaled_pic->undithered_buffer_size); if (state->version == SCI_VERSION_1_1) - gfxr_draw_pic11(scaled_pic, flags, default_palette, res->size, res->data, &style, res->id, - state->static_palette, state->static_palette_entries); + gfxr_draw_pic11(scaled_pic, flags, default_palette, res->size, res->data, &style, res->id, state->static_palette); else - gfxr_draw_pic01(scaled_pic, flags, default_palette, res->size, res->data, &style, res->id, state->version, - state->static_palette, state->static_palette_entries); + gfxr_draw_pic01(scaled_pic, flags, default_palette, res->size, res->data, &style, res->id, state->version, state->static_palette); } else { if (need_unscaled) - gfxr_draw_pic01(unscaled_pic, flags, default_palette, res->size, res->data, &basic_style, res->id, 0, - state->static_palette, state->static_palette_entries); + gfxr_draw_pic01(unscaled_pic, flags, default_palette, res->size, res->data, &basic_style, res->id, 0, state->static_palette); if (scaled_pic && scaled_pic->undithered_buffer) memcpy(scaled_pic->visual_map->index_data, scaled_pic->undithered_buffer, scaled_pic->undithered_buffer_size); - gfxr_draw_pic01(scaled_pic, flags, default_palette, res->size, res->data, &style, res->id, 0, - state->static_palette, state->static_palette_entries); + gfxr_draw_pic01(scaled_pic, flags, default_palette, res->size, res->data, &style, res->id, 0, state->static_palette); if (need_unscaled) gfxr_remove_artifacts_pic0(scaled_pic, unscaled_pic); @@ -147,12 +141,12 @@ int gfxr_interpreter_calculate_pic(gfx_resstate_t *state, gfxr_pic_t *scaled_pic return GFX_OK; } -void gfxr_palettize_view(gfxr_view_t *view, gfx_pixmap_color_t *source, int source_entries) { - int i; - - for (i = 0;i < MIN(view->colors_nr, source_entries);i++) { - if ((view->colors[i].r == 0) && (view->colors[i].g == 0) && (view->colors[i].b == 0)) { - view->colors[i] = source[i]; +void gfxr_palettize_view(gfxr_view_t *view, Palette *source) { + for (unsigned i = 0; i < MIN(view->palette->size(), source->size()); i++) { + const PaletteEntry& vc = view->palette->getColor(i); + if (vc.r == 0 && vc.g == 0 && vc.b == 0) { + const PaletteEntry& sc = source->getColor(i); + view->palette->setColor(i, sc.r, sc.g, sc.b); } } } @@ -179,7 +173,7 @@ gfxr_view_t *gfxr_interpreter_get_view(gfx_resstate_t *state, int nr, void *inte case SCI_VERSION_01_VGA_ODD: case SCI_VERSION_1_EARLY: case SCI_VERSION_1_LATE: - result = gfxr_draw_view1(resid, res->data, res->size, state->static_palette, state->static_palette_entries); + result = gfxr_draw_view1(resid, res->data, res->size, state->static_palette); break; case SCI_VERSION_1_1: case SCI_VERSION_32: @@ -188,12 +182,11 @@ gfxr_view_t *gfxr_interpreter_get_view(gfx_resstate_t *state, int nr, void *inte } if (state->version >= SCI_VERSION_01_VGA) { - if (!result->colors) { - result->colors = (gfx_pixmap_color_t *)sci_malloc(sizeof(gfx_pixmap_color_t) * state->static_palette_entries); - memset(result->colors, 0, sizeof(gfx_pixmap_color_t) * state->static_palette_entries); - result->colors_nr = state->static_palette_entries; + if (!result->palette) { + result->palette = new Palette(state->static_palette->size()); + result->palette->name = "interpreter_get_view"; } - gfxr_palettize_view(result, state->static_palette, state->static_palette_entries); + gfxr_palettize_view(result, state->static_palette); } return result; } @@ -235,9 +228,9 @@ gfx_pixmap_t *gfxr_interpreter_get_cursor(gfx_resstate_t *state, int nr, void *i byte *resource = res->data; retval = gfx_pixmap_alloc_index_data(gfx_new_pixmap(CURSOR_SIZE, CURSOR_SIZE, resid, 0, 0)); - retval->colors = gfx_sci01_cursor_colors; - retval->colors_nr = (state->version != SCI_VERSION_0) ? 3 : 2; - retval->flags |= GFX_PIXMAP_FLAG_EXTERNAL_PALETTE; + // FIXME: don't copy palette + retval->palette = new Palette(gfx_sci01_cursor_colors, (state->version != SCI_VERSION_0) ? 3 : 2); + retval->palette->name = "cursor"; retval->color_key = GFX_CURSOR_TRANSPARENT; if (state->version != SCI_VERSION_0) { @@ -305,15 +298,15 @@ int *gfxr_interpreter_get_resources(gfx_resstate_t *state, gfx_resource_type_t t return resources; } -gfx_pixmap_color_t *gfxr_interpreter_get_static_palette(gfx_resstate_t *state, int version, int *colors_nr, void *internal) { +Palette *gfxr_interpreter_get_static_palette(gfx_resstate_t *state, int version, int *colors_nr, void *internal) { if (version >= SCI_VERSION_01_VGA) return gfxr_interpreter_get_palette(state, version, colors_nr, internal, 999); *colors_nr = GFX_SCI0_PIC_COLORS_NR; - return gfx_sci0_pic_colors; + return gfx_sci0_pic_colors->getref(); } -gfx_pixmap_color_t *gfxr_interpreter_get_palette(gfx_resstate_t *state, int version, int *colors_nr, void *internal, int nr) { +Palette *gfxr_interpreter_get_palette(gfx_resstate_t *state, int version, int *colors_nr, void *internal, int nr) { ResourceManager *resmgr = (ResourceManager *)state->misc_payload; Resource *res; @@ -329,7 +322,7 @@ gfx_pixmap_color_t *gfxr_interpreter_get_palette(gfx_resstate_t *state, int vers case SCI_VERSION_01_VGA_ODD : case SCI_VERSION_1_EARLY : case SCI_VERSION_1_LATE : - return gfxr_read_pal1(res->id, colors_nr, res->data, res->size); + return gfxr_read_pal1(res->id, res->data, res->size); case SCI_VERSION_1_1 : case SCI_VERSION_32 : GFXDEBUG("Palettes are not yet supported in this SCI version\n"); |