mirror of
https://github.com/holub/mame
synced 2025-05-23 22:20:01 +03:00
Fix regressions in games with buffered spriteram.
This commit is contained in:
parent
1d37415a4a
commit
aecc1c8512
@ -276,7 +276,6 @@ void running_machine::start()
|
|||||||
palette_init(this);
|
palette_init(this);
|
||||||
m_render = auto_alloc(this, render_manager(*this));
|
m_render = auto_alloc(this, render_manager(*this));
|
||||||
generic_machine_init(this);
|
generic_machine_init(this);
|
||||||
generic_video_init(this);
|
|
||||||
generic_sound_init(this);
|
generic_sound_init(this);
|
||||||
|
|
||||||
// initialize the timers and allocate a soft_reset timer
|
// initialize the timers and allocate a soft_reset timer
|
||||||
@ -313,6 +312,9 @@ void running_machine::start()
|
|||||||
memory_init(this);
|
memory_init(this);
|
||||||
watchdog_init(this);
|
watchdog_init(this);
|
||||||
|
|
||||||
|
// must happen after memory_init because this relies on generic.spriteram
|
||||||
|
generic_video_init(this);
|
||||||
|
|
||||||
// allocate the gfx elements prior to device initialization
|
// allocate the gfx elements prior to device initialization
|
||||||
gfx_init(this);
|
gfx_init(this);
|
||||||
|
|
||||||
|
@ -141,10 +141,6 @@ video_manager::video_manager(running_machine &machine)
|
|||||||
// extract initial execution state from global configuration settings
|
// extract initial execution state from global configuration settings
|
||||||
update_refresh_speed();
|
update_refresh_speed();
|
||||||
|
|
||||||
// create spriteram buffers if necessary
|
|
||||||
if (machine.config->m_video_attributes & VIDEO_BUFFERS_SPRITERAM)
|
|
||||||
init_buffered_spriteram();
|
|
||||||
|
|
||||||
// create a render target for snapshots
|
// create a render target for snapshots
|
||||||
const char *viewname = options_get_string(machine.options(), OPTION_SNAPVIEW);
|
const char *viewname = options_get_string(machine.options(), OPTION_SNAPVIEW);
|
||||||
m_snap_native = (machine.primary_screen != NULL && (viewname[0] == 0 || strcmp(viewname, "native") == 0));
|
m_snap_native = (machine.primary_screen != NULL && (viewname[0] == 0 || strcmp(viewname, "native") == 0));
|
||||||
@ -527,33 +523,6 @@ void video_manager::add_sound_to_recording(const INT16 *sound, int numsamples)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// init_buffered_spriteram - initialize the
|
|
||||||
// double-buffered spriteram
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void video_manager::init_buffered_spriteram()
|
|
||||||
{
|
|
||||||
assert_always(m_machine.generic.spriteram_size != 0, "Video buffers spriteram but spriteram size is 0");
|
|
||||||
|
|
||||||
// allocate memory for the back buffer
|
|
||||||
m_machine.generic.buffered_spriteram.u8 = auto_alloc_array(&m_machine, UINT8, m_machine.generic.spriteram_size);
|
|
||||||
|
|
||||||
// register for saving it
|
|
||||||
state_save_register_global_pointer(&m_machine, m_machine.generic.buffered_spriteram.u8, m_machine.generic.spriteram_size);
|
|
||||||
|
|
||||||
// do the same for the second back buffer, if present
|
|
||||||
if (m_machine.generic.spriteram2_size)
|
|
||||||
{
|
|
||||||
// allocate memory
|
|
||||||
m_machine.generic.buffered_spriteram2.u8 = auto_alloc_array(&m_machine, UINT8, m_machine.generic.spriteram2_size);
|
|
||||||
|
|
||||||
// register for saving it
|
|
||||||
state_save_register_global_pointer(&m_machine, m_machine.generic.buffered_spriteram2.u8, m_machine.generic.spriteram2_size);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// video_exit - close down the video system
|
// video_exit - close down the video system
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
@ -117,7 +117,6 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
// internal helpers
|
// internal helpers
|
||||||
void init_buffered_spriteram();
|
|
||||||
static void exit_static(running_machine &machine);
|
static void exit_static(running_machine &machine);
|
||||||
void exit();
|
void exit();
|
||||||
static TIMER_CALLBACK( screenless_update_callback );
|
static TIMER_CALLBACK( screenless_update_callback );
|
||||||
|
@ -235,6 +235,28 @@ void generic_video_init(running_machine *machine)
|
|||||||
|
|
||||||
state_save_register_item(machine, "video", NULL, 0, state->flip_screen_x);
|
state_save_register_item(machine, "video", NULL, 0, state->flip_screen_x);
|
||||||
state_save_register_item(machine, "video", NULL, 0, state->flip_screen_y);
|
state_save_register_item(machine, "video", NULL, 0, state->flip_screen_y);
|
||||||
|
|
||||||
|
// create spriteram buffers if necessary
|
||||||
|
if (machine->config->m_video_attributes & VIDEO_BUFFERS_SPRITERAM)
|
||||||
|
{
|
||||||
|
assert_always(machine->generic.spriteram_size != 0, "Video buffers spriteram but spriteram size is 0");
|
||||||
|
|
||||||
|
// allocate memory for the back buffer
|
||||||
|
machine->generic.buffered_spriteram.u8 = auto_alloc_array(machine, UINT8, machine->generic.spriteram_size);
|
||||||
|
|
||||||
|
// register for saving it
|
||||||
|
state_save_register_global_pointer(machine, machine->generic.buffered_spriteram.u8, machine->generic.spriteram_size);
|
||||||
|
|
||||||
|
// do the same for the second back buffer, if present
|
||||||
|
if (machine->generic.spriteram2_size)
|
||||||
|
{
|
||||||
|
// allocate memory
|
||||||
|
machine->generic.buffered_spriteram2.u8 = auto_alloc_array(machine, UINT8, machine->generic.spriteram2_size);
|
||||||
|
|
||||||
|
// register for saving it
|
||||||
|
state_save_register_global_pointer(machine, machine->generic.buffered_spriteram2.u8, machine->generic.spriteram2_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user