x68k: make the bitmaps auto resize (nw)

This commit is contained in:
cracyc 2016-01-04 22:05:10 -06:00
parent f9c84b9c78
commit 134edd6d14
2 changed files with 20 additions and 20 deletions

View File

@ -113,8 +113,8 @@ public:
std::vector<UINT16> m_gvram;
std::vector<UINT16> m_spritereg;
std::unique_ptr<bitmap_ind16> m_pcgbitmap;
std::unique_ptr<bitmap_ind16> 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);

View File

@ -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<bitmap_ind16>(1024, 1024);
m_pcgbitmap->fill(0);
m_screen->register_screen_bitmap(m_pcgbitmap);
m_pcgbitmap.fill(0);
m_gfxbitmap = std::make_unique<bitmap_ind16>(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);
}