From 0afb6e8a694531efbbce2128b9699a191d25898f Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sun, 7 Aug 2022 20:42:55 +0300 Subject: [PATCH] Full refresh hardware emulated RTG board display buffer when mode changes. --- gfxboard.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gfxboard.cpp b/gfxboard.cpp index c57440c5..07022472 100644 --- a/gfxboard.cpp +++ b/gfxboard.cpp @@ -393,6 +393,8 @@ struct rtggfxboard struct pci_board_state *pcibs; bool pcem_direct; + int width_redraw, height_redraw; + void *userdata; }; @@ -707,6 +709,22 @@ void video_blit_memtoscreen(int x, int y, int y1, int y2, int w, int h) } if (gb->gfxboard_surface) { struct picasso_vidbuf_description *vidinfo = &picasso_vidinfo[gb->monitor_id]; + if (w != gb->width_redraw || h != gb->height_redraw) { + for (int y = 0; y < vidinfo->height; y++) { + uae_u8 *d = gb->gfxboard_surface + y * vidinfo->rowbytes; + if (y < h) { + if (vidinfo->width > w) { + memset(d + w * vidinfo->pixbytes, 0, (vidinfo->width - w) * vidinfo->pixbytes); + } + } else { + memset(d, 0, vidinfo->width * vidinfo->pixbytes); + } + } + gb->width_redraw = w; + gb->height_redraw = h; + y1 = 0; + y2 = h; + } for (int yy = y1; yy < y2 && yy < vidinfo->height; yy++) { uae_u8 *d = gb->gfxboard_surface + yy * vidinfo->rowbytes; uae_u8 *s = getpcembuffer32(x, y, yy); -- 2.47.3