SCI: Replaced gfx_driver_t::set_palette and install_palette by directly invoking their OSystem counterparts

svn-id: r40385
This commit is contained in:
Max Horn 2009-05-08 16:00:39 +00:00
parent 418d80c8a8
commit e34c6316c6
3 changed files with 8 additions and 56 deletions

View File

@ -38,7 +38,6 @@ struct _scummvm_driver_state {
byte *visual[2];
uint8 *pointer_data;
int xsize, ysize;
uint8 *palette_data;
};
#define S ((struct _scummvm_driver_state *)(drv->state))
@ -79,10 +78,6 @@ static int scummvm_init(gfx_driver_t *drv, int xfact, int yfact, int bytespp) {
drv->mode = gfx_new_mode(xfact, yfact, format, new Palette(256), 0);
drv->mode->palette->name = "global";
S->palette_data = new uint8[4*256];
for (i = 0; i < 4*256; ++i)
S->palette_data[i] = 0;
return GFX_OK;
}
@ -102,9 +97,6 @@ static void scummvm_exit(gfx_driver_t *drv) {
delete[] S->pointer_data;
S->pointer_data = NULL;
delete[] S->palette_data;
S->palette_data = NULL;
delete S;
}
}
@ -306,28 +298,6 @@ static int scummvm_set_pointer(gfx_driver_t *drv, gfx_pixmap_t *pointer, Common:
return GFX_OK;
}
// Palette operations
static int scummvm_set_palette(gfx_driver_t *drv, int index, byte red, byte green, byte blue) {
if (index < 0 || index > 255) {
GFXERROR("Attempt to set invalid palette entry %d\n", index);
return GFX_ERROR;
}
S->palette_data[4*index+0] = red;
S->palette_data[4*index+1] = green;
S->palette_data[4*index+2] = blue;
S->palette_data[4*index+3] = 255;
return GFX_OK;
}
static int scummvm_install_palette(gfx_driver_t *drv, Palette* palette) {
g_system->setPalette(S->palette_data, 0, palette->size());
return GFX_OK;
}
gfx_driver_t gfx_driver_scummvm = {
NULL,
0, 0,
@ -343,8 +313,6 @@ gfx_driver_t gfx_driver_scummvm = {
scummvm_update,
scummvm_set_static_buffer,
scummvm_set_pointer,
scummvm_set_palette,
scummvm_install_palette,
NULL
};

View File

@ -267,27 +267,6 @@ struct gfx_driver_t { /* Graphics driver */
*/
/*** Palette operations ***/
int (*set_palette)(gfx_driver_t *drv, int index, byte red, byte green,
byte blue);
/* Manipulates a palette index in the hardware palette.
** The actual update is not performed until install_palette() is called.
** This way updates can be batched.
** Parameters: (gfx_driver_t *) drv: The driver affected
** (int) index: The index of the palette entry to modify
** (int x int x int) red, green, blue: The RGB intensities to
** set for the specified index. The minimum
** intensity is 0, maximum is 0xff.
** Returns : (int) GFX_OK, GFX_ERROR or GFX_FATAL
** This function does not need to update mode->palette, as this is done
** by the calling code.
** set_palette() is only required for targets supporting color index mode.
*/
int (*install_palette)(gfx_driver_t *drv, Palette* pal);
/* As set_palette, but for the full palette. */
void *state; /* Reserved for internal use */
};

View File

@ -202,12 +202,17 @@ static int _gfxop_install_pixmap(gfx_driver_t *driver, gfx_pixmap_t *pxm) {
// TODO: We probably want to only update the colours used by this pixmap
// here. This will require updating the 'dirty' system.
for (unsigned int i = 0; i < driver->mode->palette->size(); ++i) {
uint8 paletteData[4*256];
const uint paletteSize = driver->mode->palette->size();
for (uint i = 0; i < paletteSize; ++i) {
const PaletteEntry& c = (*driver->mode->palette)[i];
driver->set_palette(driver, i, c.r, c.g, c.b);
paletteData[4*i+0] = c.r;
paletteData[4*i+1] = c.g;
paletteData[4*i+2] = c.b;
paletteData[4*i+3] = 255;
}
driver->install_palette(driver, driver->mode->palette);
g_system->setPalette(paletteData, 0, paletteSize);
driver->mode->palette->markClean();
return GFX_OK;
}