From 134edd6d14d9dfb13ab4ca030edab336e863ea6a Mon Sep 17 00:00:00 2001 From: cracyc Date: Mon, 4 Jan 2016 22:05:10 -0600 Subject: [PATCH] x68k: make the bitmaps auto resize (nw) --- src/mame/includes/x68k.h | 4 ++-- src/mame/video/x68k.cpp | 36 ++++++++++++++++++------------------ 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/mame/includes/x68k.h b/src/mame/includes/x68k.h index 0cc38812afe..ed1c6ca94dc 100644 --- a/src/mame/includes/x68k.h +++ b/src/mame/includes/x68k.h @@ -113,8 +113,8 @@ public: std::vector m_gvram; std::vector m_spritereg; - std::unique_ptr m_pcgbitmap; - std::unique_ptr m_gfxbitmap; + bitmap_ind16 m_pcgbitmap; + bitmap_ind16 m_gfxbitmap; void floppy_load_unload(bool load, floppy_image_device *dev); int floppy_load(floppy_image_device *dev); diff --git a/src/mame/video/x68k.cpp b/src/mame/video/x68k.cpp index 72946427123..927489ab1a1 100644 --- a/src/mame/video/x68k.cpp +++ b/src/mame/video/x68k.cpp @@ -900,11 +900,11 @@ void x68k_state::x68k_draw_gfx(bitmap_rgb32 &bitmap,rectangle cliprect) if(m_crtc.reg[20] & 0x0800) // if graphic layers are set to buffer, then they aren't visible return; - m_gfxbitmap->fill(0, cliprect); + m_gfxbitmap.fill(0, cliprect); for(priority=3;priority>=0;priority--) { - gfxblend = x68k_draw_gfx_scanline(*m_gfxbitmap,cliprect,priority); + gfxblend = x68k_draw_gfx_scanline(m_gfxbitmap,cliprect,priority); } for(scanline=cliprect.min_y;scanline<=cliprect.max_y;scanline++) @@ -915,13 +915,13 @@ void x68k_state::x68k_draw_gfx(bitmap_rgb32 &bitmap,rectangle cliprect) { if((m_video.reg[0] & 0x03) == 3) { - colour = m_gfxbitmap->pix16(scanline, pixel); + colour = m_gfxbitmap.pix16(scanline, pixel); if(colour || (m_video.gfx_pri == 2)) bitmap.pix32(scanline, pixel) = GGGGGRRRRRBBBBBI_decoder(colour); } else if(gfxblend) { - colour = m_gfxbitmap->pix16(scanline, pixel); + colour = m_gfxbitmap.pix16(scanline, pixel); if(((m_video.reg[2] & 0x1900) == 0x1900) && (m_video.gfx_pri != 2) && (colour & 1)) blend = true; else @@ -936,7 +936,7 @@ void x68k_state::x68k_draw_gfx(bitmap_rgb32 &bitmap,rectangle cliprect) } else { - colour = m_gfxbitmap->pix16(scanline, pixel) & 0xff; + colour = m_gfxbitmap.pix16(scanline, pixel) & 0xff; if(((m_video.reg[2] & 0x1900) == 0x1900) && (m_video.gfx_pri != 2) && (colour & 1)) { blend = true; @@ -1101,11 +1101,11 @@ VIDEO_START_MEMBER(x68k_state,x68000) m_bg0_16->set_transparent_pen(0); m_bg1_16->set_transparent_pen(0); - m_pcgbitmap = std::make_unique(1024, 1024); - m_pcgbitmap->fill(0); + m_screen->register_screen_bitmap(m_pcgbitmap); + m_pcgbitmap.fill(0); - m_gfxbitmap = std::make_unique(1024, 1024); - m_gfxbitmap->fill(0); + m_screen->register_screen_bitmap(m_gfxbitmap); + m_gfxbitmap.fill(0); // m_scanline_timer->adjust(attotime::zero, 0, attotime::from_hz(55.45)/568); } @@ -1176,46 +1176,46 @@ UINT32 x68k_state::screen_update_x68000(screen_device &screen, bitmap_rgb32 &bit // Sprite / BG Tiles if(priority == m_video.sprite_pri /*&& (m_spritereg[0x404] & 0x0200)*/ && (m_video.reg[2] & 0x0040)) { - m_pcgbitmap->fill(0, rect); - x68k_draw_sprites(*m_pcgbitmap,1,rect); + m_pcgbitmap.fill(0, rect); + x68k_draw_sprites(m_pcgbitmap,1,rect); if((m_spritereg[0x404] & 0x0008)) { if((m_spritereg[0x404] & 0x0030) == 0x10) // BG1 TXSEL { x68k_bg0->set_scrollx(0,(m_spritereg[0x402] - m_crtc.hbegin - m_crtc.bg_hshift) & 0x3ff); x68k_bg0->set_scrolly(0,(m_spritereg[0x403] - m_crtc.vbegin) & 0x3ff); - x68k_bg0->draw(screen, *m_pcgbitmap,rect,0,0); + x68k_bg0->draw(screen, m_pcgbitmap,rect,0,0); } else { x68k_bg1->set_scrollx(0,(m_spritereg[0x402] - m_crtc.hbegin - m_crtc.bg_hshift) & 0x3ff); x68k_bg1->set_scrolly(0,(m_spritereg[0x403] - m_crtc.vbegin) & 0x3ff); - x68k_bg1->draw(screen, *m_pcgbitmap,rect,0,0); + x68k_bg1->draw(screen, m_pcgbitmap,rect,0,0); } } - x68k_draw_sprites(*m_pcgbitmap,2,rect); + x68k_draw_sprites(m_pcgbitmap,2,rect); if((m_spritereg[0x404] & 0x0001)) { if((m_spritereg[0x404] & 0x0006) == 0x02) // BG0 TXSEL { x68k_bg0->set_scrollx(0,(m_spritereg[0x400] - m_crtc.hbegin - m_crtc.bg_hshift) & 0x3ff); x68k_bg0->set_scrolly(0,(m_spritereg[0x401] - m_crtc.vbegin) & 0x3ff); - x68k_bg0->draw(screen, *m_pcgbitmap,rect,0,0); + x68k_bg0->draw(screen, m_pcgbitmap,rect,0,0); } else { x68k_bg1->set_scrollx(0,(m_spritereg[0x400] - m_crtc.hbegin - m_crtc.bg_hshift) & 0x3ff); x68k_bg1->set_scrolly(0,(m_spritereg[0x401] - m_crtc.vbegin) & 0x3ff); - x68k_bg1->draw(screen, *m_pcgbitmap,rect,0,0); + x68k_bg1->draw(screen, m_pcgbitmap,rect,0,0); } } - x68k_draw_sprites(*m_pcgbitmap,3,rect); + x68k_draw_sprites(m_pcgbitmap,3,rect); for(scanline=rect.min_y;scanline<=rect.max_y;scanline++) { for(pixel=m_crtc.hbegin;pixel<=m_crtc.hend;pixel++) { - UINT8 colour = m_pcgbitmap->pix16(scanline, pixel) & 0xff; + UINT8 colour = m_pcgbitmap.pix16(scanline, pixel) & 0xff; if((colour && (m_pcgpalette->pen(colour) & 0xffffff)) || ((m_video.reg[1] & 0x3000) == 0x2000)) bitmap.pix32(scanline, pixel) = m_pcgpalette->pen(colour); }