cps1.cpp, segas16b.cpp: Fix some unsafe bitmap usage in video update routines causing tilemap asserts in debug builds and segmentation faults in some non-debug builds

This commit is contained in:
AJR 2019-10-18 19:19:51 -04:00
parent ee76056937
commit 854469730f
2 changed files with 5 additions and 5 deletions

View File

@ -2306,6 +2306,8 @@ void cps_state::video_start()
cps1_get_video_base(); /* Calculate base pointers */
cps1_get_video_base(); /* Calculate old base pointers */
m_screen->register_screen_bitmap(m_dummy_bitmap);
/* state save register */
save_item(NAME(m_scanline1));
save_item(NAME(m_scanline2));
@ -2930,7 +2932,6 @@ void cps_state::cps1_render_layer( screen_device &screen, bitmap_ind16 &bitmap,
void cps_state::cps1_render_high_layer( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer )
{
bitmap_ind16 dummy_bitmap;
switch (layer)
{
case 0:
@ -2939,7 +2940,7 @@ void cps_state::cps1_render_high_layer( screen_device &screen, bitmap_ind16 &bit
case 1:
case 2:
case 3:
m_bg_tilemap[layer - 1]->draw(screen, dummy_bitmap, cliprect, TILEMAP_DRAW_LAYER0, 1);
m_bg_tilemap[layer - 1]->draw(screen, m_dummy_bitmap, cliprect, TILEMAP_DRAW_LAYER0, 1);
break;
}
}

View File

@ -47,9 +47,8 @@ uint32_t segas16b_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
m_segaic16vid->tilemap_draw( screen, bitmap, cliprect, 0, segaic16_video_device::TILEMAP_BACKGROUND, 1 | TILEMAP_DRAW_OPAQUE, 0x00);
// draw background again, just to set the priorities on non-transparent pixels
bitmap_ind16 dummy_bitmap;
m_segaic16vid->tilemap_draw( screen, dummy_bitmap, cliprect, 0, segaic16_video_device::TILEMAP_BACKGROUND, 0, 0x01);
m_segaic16vid->tilemap_draw( screen, dummy_bitmap, cliprect, 0, segaic16_video_device::TILEMAP_BACKGROUND, 1, 0x02);
m_segaic16vid->tilemap_draw( screen, bitmap, cliprect, 0, segaic16_video_device::TILEMAP_BACKGROUND, 0, 0x01);
m_segaic16vid->tilemap_draw( screen, bitmap, cliprect, 0, segaic16_video_device::TILEMAP_BACKGROUND, 1, 0x02);
// draw foreground
m_segaic16vid->tilemap_draw( screen, bitmap, cliprect, 0, segaic16_video_device::TILEMAP_FOREGROUND, 0, 0x02);