mirror of
https://github.com/holub/mame
synced 2025-06-30 07:58:56 +03:00
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:
parent
ee76056937
commit
854469730f
@ -2306,6 +2306,8 @@ void cps_state::video_start()
|
|||||||
cps1_get_video_base(); /* Calculate base pointers */
|
cps1_get_video_base(); /* Calculate base pointers */
|
||||||
cps1_get_video_base(); /* Calculate old base pointers */
|
cps1_get_video_base(); /* Calculate old base pointers */
|
||||||
|
|
||||||
|
m_screen->register_screen_bitmap(m_dummy_bitmap);
|
||||||
|
|
||||||
/* state save register */
|
/* state save register */
|
||||||
save_item(NAME(m_scanline1));
|
save_item(NAME(m_scanline1));
|
||||||
save_item(NAME(m_scanline2));
|
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 )
|
void cps_state::cps1_render_high_layer( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer )
|
||||||
{
|
{
|
||||||
bitmap_ind16 dummy_bitmap;
|
|
||||||
switch (layer)
|
switch (layer)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
@ -2939,7 +2940,7 @@ void cps_state::cps1_render_high_layer( screen_device &screen, bitmap_ind16 &bit
|
|||||||
case 1:
|
case 1:
|
||||||
case 2:
|
case 2:
|
||||||
case 3:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
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
|
// draw background again, just to set the priorities on non-transparent pixels
|
||||||
bitmap_ind16 dummy_bitmap;
|
m_segaic16vid->tilemap_draw( screen, bitmap, cliprect, 0, segaic16_video_device::TILEMAP_BACKGROUND, 0, 0x01);
|
||||||
m_segaic16vid->tilemap_draw( screen, dummy_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);
|
||||||
m_segaic16vid->tilemap_draw( screen, dummy_bitmap, cliprect, 0, segaic16_video_device::TILEMAP_BACKGROUND, 1, 0x02);
|
|
||||||
|
|
||||||
// draw foreground
|
// draw foreground
|
||||||
m_segaic16vid->tilemap_draw( screen, bitmap, cliprect, 0, segaic16_video_device::TILEMAP_FOREGROUND, 0, 0x02);
|
m_segaic16vid->tilemap_draw( screen, bitmap, cliprect, 0, segaic16_video_device::TILEMAP_FOREGROUND, 0, 0x02);
|
||||||
|
Loading…
Reference in New Issue
Block a user