diff options
author | Filippos Karapetis | 2009-03-18 11:07:29 +0000 |
---|---|---|
committer | Filippos Karapetis | 2009-03-18 11:07:29 +0000 |
commit | c9eff6e1f87231f63b3cd4a5dce4b04ffac96075 (patch) | |
tree | 85bd3b70fd6ea022d3ae4876dae33e25df7bf40e | |
parent | 739181c3b7bdc9dac18c696e0928819a836e1bf0 (diff) | |
download | scummvm-rg350-c9eff6e1f87231f63b3cd4a5dce4b04ffac96075.tar.gz scummvm-rg350-c9eff6e1f87231f63b3cd4a5dce4b04ffac96075.tar.bz2 scummvm-rg350-c9eff6e1f87231f63b3cd4a5dce4b04ffac96075.zip |
Cleaned up graphics initialization a bit
svn-id: r39513
-rw-r--r-- | engines/sci/gfx/gfx_driver.cpp | 7 | ||||
-rw-r--r-- | engines/sci/gfx/gfx_driver.h | 14 | ||||
-rw-r--r-- | engines/sci/gfx/operations.cpp | 74 | ||||
-rw-r--r-- | engines/sci/gfx/operations.h | 15 | ||||
-rw-r--r-- | engines/sci/sci.cpp | 12 |
5 files changed, 39 insertions, 83 deletions
diff --git a/engines/sci/gfx/gfx_driver.cpp b/engines/sci/gfx/gfx_driver.cpp index 985033de09..95c1db3d94 100644 --- a/engines/sci/gfx/gfx_driver.cpp +++ b/engines/sci/gfx/gfx_driver.cpp @@ -43,7 +43,7 @@ struct _scummvm_driver_state { #define S ((struct _scummvm_driver_state *)(drv->state)) -static int scummvm_init_specific(gfx_driver_t *drv, int xfact, int yfact, int bytespp) { +static int scummvm_init(gfx_driver_t *drv, int xfact, int yfact, int bytespp) { int i; if (!drv->state) // = S @@ -86,10 +86,6 @@ static int scummvm_init_specific(gfx_driver_t *drv, int xfact, int yfact, int by return GFX_OK; } -static int scummvm_init(gfx_driver_t *drv) { - return scummvm_init_specific(drv, 1, 1, GFX_COLOR_MODE_INDEX); -} - static void scummvm_exit(gfx_driver_t *drv) { int i; if (S) { @@ -331,7 +327,6 @@ gfx_driver_t gfx_driver_scummvm = { 0, // flags here 0, NULL, - scummvm_init_specific, scummvm_init, scummvm_exit, scummvm_draw_line, diff --git a/engines/sci/gfx/gfx_driver.h b/engines/sci/gfx/gfx_driver.h index e61f305e66..84b8526b7c 100644 --- a/engines/sci/gfx/gfx_driver.h +++ b/engines/sci/gfx/gfx_driver.h @@ -111,7 +111,7 @@ struct gfx_driver_t { /* Graphics driver */ ** console). */ - int (*init_specific)(gfx_driver_t *drv, int xres, int yres, + int (*init)(gfx_driver_t *drv, int xres, int yres, int bytespp); /* Attempts to initialize a specific graphics mode ** Parameters: (gfx_driver_t *) drv: The affected driver @@ -129,18 +129,6 @@ struct gfx_driver_t { /* Graphics driver */ ** specified in gfx_tools.h. */ - int (*init)(gfx_driver_t *drv); - /* Initialize any graphics mode - ** Parameters: (gfx_driver_t *) drv: The affected driver - ** Returns : (int) GFX_OK on success, GFX_FATAL otherwise. - ** This function attempts to set /any/ graphics mode, starting with the one - ** most 'natural' to the graphics target. Target implementors have relatively - ** free reign in choosing the heuristics used to determine the resulting - ** mode. - ** Must also set drv->mode, preferably with the gfx_new_mode() function - ** specified in gfx_tools.h. - */ - void (*exit)(gfx_driver_t *drv); /* Uninitializes the current graphics mode ** Paramters: (gfx_driver_t *) drv: The driver to uninitialize diff --git a/engines/sci/gfx/operations.cpp b/engines/sci/gfx/operations.cpp index c4bcaff5d2..245f7ba0ec 100644 --- a/engines/sci/gfx/operations.cpp +++ b/engines/sci/gfx/operations.cpp @@ -422,18 +422,42 @@ static void init_aux_pixmap(gfx_pixmap_t **pixmap) { (*pixmap)->palette = new Palette(default_colors, DEFAULT_COLORS_NR); } -static int _gfxop_init_common(gfx_state_t *state, gfx_options_t *options, ResourceManager *resManager) { - gfxr_init_static_palette(); +int gfxop_init(gfx_state_t *state, gfx_options_t *options, ResourceManager *resManager, + int xfact, int yfact, gfx_color_mode_t bpp) { + int color_depth = bpp ? bpp : 1; + int initialized = 0; + + BASIC_CHECKS(GFX_FATAL); state->options = options; + state->visible_map = GFX_MASK_VISUAL; + state->fullscreen_override = NULL; // No magical override + state->options = options; + state->disable_dirty = 0; + state->_events.clear(); + state->pic = state->pic_unscaled = NULL; + state->pic_nr = -1; // Set background pic number to an invalid value + state->tag_mode = 0; + state->dirty_rects = NULL; + state->static_palette = NULL; + + do { + if (!state->driver->init(state->driver, xfact, yfact, color_depth)) + initialized = 1; + else + color_depth++; + } while (!initialized && color_depth < 9 && !bpp); + + if (!initialized) + return GFX_FATAL; + + gfxr_init_static_palette(); if (!((state->resstate = gfxr_new_resource_manager(state->version, state->options, state->driver, resManager)))) { GFXERROR("Failed to initialize resource manager!\n"); return GFX_FATAL; } - state->static_palette = NULL; - if (state->version < SCI_VERSION_01_VGA) { state->static_palette = gfx_sci0_pic_colors->getref(); } else if (state->version == SCI_VERSION_1_1 || state->version == SCI_VERSION_32) { @@ -444,57 +468,15 @@ static int _gfxop_init_common(gfx_state_t *state, gfx_options_t *options, Resour state->static_palette = gfxr_read_pal1(res->id, res->data, res->size); } - state->visible_map = GFX_MASK_VISUAL; - state->fullscreen_override = NULL; // No magical override gfxop_set_clip_zone(state, gfx_rect(0, 0, 320, 200)); init_aux_pixmap(&(state->control_map)); init_aux_pixmap(&(state->priority_map)); init_aux_pixmap(&(state->static_priority_map)); - state->options = options; - state->disable_dirty = 0; - state->_events.clear(); - - state->pic = state->pic_unscaled = NULL; - - state->pic_nr = -1; // Set background pic number to an invalid value - - state->tag_mode = 0; - - state->dirty_rects = NULL; - return GFX_OK; } -int gfxop_init_default(gfx_state_t *state, gfx_options_t *options, ResourceManager *resManager) { - BASIC_CHECKS(GFX_FATAL); - if (state->driver->init(state->driver)) - return GFX_FATAL; - - return _gfxop_init_common(state, options, resManager); -} - -int gfxop_init(gfx_state_t *state, int xfact, int yfact, gfx_color_mode_t bpp, - gfx_options_t *options, ResourceManager *resManager) { - int color_depth = bpp ? bpp : 1; - int initialized = 0; - - BASIC_CHECKS(GFX_FATAL); - - do { - if (!state->driver->init_specific(state->driver, xfact, yfact, color_depth)) - initialized = 1; - else - color_depth++; - } while (!initialized && color_depth < 9 && !bpp); - - if (!initialized) - return GFX_FATAL; - - return _gfxop_init_common(state, options, resManager); -} - int gfxop_set_parameter(gfx_state_t *state, char *attribute, char *value) { BASIC_CHECKS(GFX_FATAL); diff --git a/engines/sci/gfx/operations.h b/engines/sci/gfx/operations.h index e3ed29533b..6a5965d9bc 100644 --- a/engines/sci/gfx/operations.h +++ b/engines/sci/gfx/operations.h @@ -139,18 +139,9 @@ struct gfx_state_t { /* Fundamental operations */ /**************************/ -int gfxop_init_default(gfx_state_t *state, gfx_options_t *options, ResourceManager *resManager); -/* Initializes a graphics mode suggested by the graphics driver -** Parameters: (gfx_state_ t *) state: The state to initialize in that mode -** (gfx_options_t *) options: Rendering options -** (void *) misc_info: Additional information for the interpreter -** part of the resource loader -** Returns : (int) GFX_OK on success, GFX_FATAL otherwise -*/ - -int gfxop_init(gfx_state_t *state, int xfact, int yfact, gfx_color_mode_t bpp, - gfx_options_t *options, ResourceManager *resManager); -/* Initializes a custom graphics mode +int gfxop_init(gfx_state_t *state, gfx_options_t *options, ResourceManager *resManager, + int xfact = 1, int yfact = 1, gfx_color_mode_t bpp = GFX_COLOR_MODE_INDEX); +/* Initializes a graphics mode ** Parameters: (gfx_state_t *) state: The state to initialize ** (int x int) xfact, yfact: Horizontal and vertical scale factors ** (gfx_color_mode_t) bpp: Bytes per pixel to initialize with, or diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index 6946d86f12..cd065d1701 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -236,15 +236,15 @@ Common::Error SciEngine::run() { // Set the savegame dir script_set_gamestate_save_dir(gamestate, ConfMan.get("savepath").c_str()); - gamestate->port_serial = 0; - gamestate->have_mouse_flag = 1; - gamestate->animation_delay = 5; - gamestate->animation_granularity = 4; gfx_crossblit_alpha_threshold = 0x90; - gfx_state_t gfx_state; gfx_state.driver = &gfx_driver_scummvm; gfx_state.version = _resmgr->_sciVersion; + + gamestate->port_serial = 0; + gamestate->have_mouse_flag = 1; + gamestate->animation_delay = 5; + gamestate->animation_granularity = 4; gamestate->gfx_state = &gfx_state; // Default config: @@ -268,7 +268,7 @@ Common::Error SciEngine::run() { } // Default config ends - if (gfxop_init_default(&gfx_state, &gfx_options, _resmgr)) { + if (gfxop_init(&gfx_state, &gfx_options, _resmgr)) { fprintf(stderr, "Graphics initialization failed. Aborting...\n"); return Common::kUnknownError; } |