]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Size/coordinate change detection is now identical in all 3 render backends.
authorToni Wilen <twilen@winuae.net>
Sun, 23 Apr 2023 16:16:50 +0000 (19:16 +0300)
committerToni Wilen <twilen@winuae.net>
Sun, 23 Apr 2023 16:16:50 +0000 (19:16 +0300)
od-win32/direct3d.cpp
od-win32/direct3d11.cpp
od-win32/gdirender.cpp
od-win32/win32gfx.cpp

index a36b1ea247411bf81eaba033b027874b500f984d..c9ae056973699b381fafbef80eabbee61f7275f7 100644 (file)
@@ -211,6 +211,7 @@ struct d3dstruct
        float xmult, ymult;
        bool cursor_v, cursor_scale;
        int statusbar_vx, statusbar_hx;
+       RECT sr2, dr2, zr2;
 
        struct gfx_filterdata *filterd3d;
        int filterd3didx;
@@ -2096,8 +2097,6 @@ static void setupscenecoords(struct d3dstruct *d3d, bool normalrender, int monid
        if (!normalrender)
                return;
 
-       //write_log (_T("%dx%d %dx%d %dx%d\n"), tin_w, tin_h, tin_w, tin_h, window_w, window_h);
-
        getfilterrect2 (monid, &dr, &sr, &zr, d3d->window_w, d3d->window_h, d3d->tin_w / d3d->dmult, d3d->tin_h / d3d->dmult, d3d->dmult, &d3d->dmode, d3d->tin_w, d3d->tin_h);
 
        if (memcmp (&sr, &sr2[monid], sizeof RECT) || memcmp (&dr, &dr2[monid], sizeof RECT) || memcmp (&zr, &zr2[monid], sizeof RECT)) {
@@ -2110,6 +2109,10 @@ static void setupscenecoords(struct d3dstruct *d3d, bool normalrender, int monid
                zr2[monid] = zr;
        }
 
+       d3d->sr2 = sr;
+       d3d->dr2 = dr;
+       d3d->zr2 = zr;
+
        dw = (float)dr.right - dr.left;
        dh = (float)dr.bottom - dr.top;
        w = (float)sr.right - sr.left;
@@ -3100,6 +3103,8 @@ static bool xD3D_alloctexture (int monid, int w, int h)
        if (d3d->fakemode)
                return false;
 
+       setupscenecoords(d3d, true, monid);
+
        changed_prefs.leds_on_screen |= STATUSLINE_TARGET;
        currprefs.leds_on_screen |= STATUSLINE_TARGET;
 
index 7bd291d154604f5926a48fd029d5e6222c9c5549..1f1643c89e4ec0f11baebafec13afadaaaf905fb 100644 (file)
@@ -1544,16 +1544,14 @@ static bool UpdateBuffers(struct d3d11struct *d3d, int monid)
 static void setupscenecoords(struct d3d11struct *d3d, bool normalrender, int monid)
 {
        RECT sr, dr, zr;
+       static RECT sr2[MAX_AMIGAMONITORS], dr2[MAX_AMIGAMONITORS], zr2[MAX_AMIGAMONITORS];
 
        if (!normalrender)
                return;
 
        getfilterrect2(d3d->num, &dr, &sr, &zr, d3d->m_screenWidth, d3d->m_screenHeight, d3d->m_bitmapWidth / d3d->dmult, d3d->m_bitmapHeight / d3d->dmult, d3d->dmult, &d3d->dmode, d3d->m_bitmapWidth, d3d->m_bitmapHeight);
 
-       if (!memcmp(&sr, &d3d->sr2, sizeof RECT) && !memcmp(&dr, &d3d->dr2, sizeof RECT) && !memcmp(&zr, &d3d->zr2, sizeof RECT)) {
-               return;
-       }
-       if (1) {
+       if (memcmp(&sr, &sr2[monid], sizeof RECT) || memcmp(&dr, &dr2[monid], sizeof RECT) || memcmp(&zr, &zr2[monid], sizeof RECT)) {
                write_log(_T("POS (%d %d %d %d) - (%d %d %d %d)[%d,%d] (%d %d) S=%d*%d B=%d*%d\n"),
                        dr.left, dr.top, dr.right, dr.bottom,
                        sr.left, sr.top, sr.right, sr.bottom,
@@ -1561,6 +1559,9 @@ static void setupscenecoords(struct d3d11struct *d3d, bool normalrender, int mon
                        zr.left, zr.top,
                        d3d->m_screenWidth, d3d->m_screenHeight,
                        d3d->m_bitmapWidth, d3d->m_bitmapHeight);
+               sr2[monid] = sr;
+               dr2[monid] = dr;
+               zr2[monid] = zr;
        }
 
        d3d->sr2 = sr;
@@ -1596,8 +1597,6 @@ static void setupscenecoords(struct d3d11struct *d3d, bool normalrender, int mon
        d3d->cursor_offset_x = -zr.left;
        d3d->cursor_offset_y = -zr.top;
 
-       write_log(_T("%d %d %.f %.f\n"), d3d->xoffset, d3d->yoffset, d3d->xmult, d3d->ymult);
-
        UpdateBuffers(d3d, monid);
 
        xD3DXMatrixOrthoOffCenterLH(&d3d->m_matProj_out, 0, w + 0.05f, 0, h + 0.05f, 0.0f, 1.0f);
index 650013e5bb47866ca6d4098808b21811c42933de..f1313673b596077f7fa7904aa575c6d29c01a8f6 100644 (file)
@@ -80,16 +80,14 @@ static void gdi_restore(int monid, bool checkonly)
        struct gdistruct *gdi = &gdidata[monid];
 }
 
-static void setupscenecoords(struct gdistruct *gdi)
+static void setupscenecoords(struct gdistruct *gdi, int monid)
 {
        RECT sr, dr, zr;
+       static RECT sr2[MAX_AMIGAMONITORS], dr2[MAX_AMIGAMONITORS], zr2[MAX_AMIGAMONITORS];
 
        getfilterrect2(gdi->num, &dr, &sr, &zr, gdi->wwidth, gdi->wheight, gdi->bm.width / gdi->dmult, gdi->bm.height / gdi->dmult, gdi->dmult, &gdi->dmode, gdi->bm.width, gdi->bm.height);
 
-       if (!memcmp(&sr, &gdi->sr2, sizeof RECT) && !memcmp(&dr, &gdi->dr2, sizeof RECT) && !memcmp(&zr, &gdi->zr2, sizeof RECT)) {
-               return;
-       }
-       if (1) {
+       if (memcmp(&sr, &sr2[monid], sizeof RECT) || memcmp(&dr, &dr2[monid], sizeof RECT) || memcmp(&zr, &zr2[monid], sizeof RECT)) {
                write_log(_T("POS (%d %d %d %d) - (%d %d %d %d)[%d,%d] (%d %d) S=%d*%d B=%d*%d\n"),
                        dr.left, dr.top, dr.right, dr.bottom,
                        sr.left, sr.top, sr.right, sr.bottom,
@@ -97,6 +95,9 @@ static void setupscenecoords(struct gdistruct *gdi)
                        zr.left, zr.top,
                        gdi->wwidth, gdi->wheight,
                        gdi->bm.width, gdi->bm.height);
+               sr2[monid] = sr;
+               dr2[monid] = dr;
+               zr2[monid] = zr;
        }
 
        gdi->sr2 = sr;
@@ -242,7 +243,7 @@ static bool gdi_alloctexture(int monid, int w, int h)
                SetDCBrushColor(gdi->hdc, RGB(0, 0, 0));
                if (allocsprite(gdi, &gdi->bm, w, h)) {
                        gdi->dmult = S2X_getmult(monid);
-                       setupscenecoords(gdi);
+                       setupscenecoords(gdi, monid);
                        return true;
                }
        }
@@ -326,7 +327,7 @@ static bool gdi_renderframe(int monid, int mode, bool immediate)
 {
        struct gdistruct *gdi = &gdidata[monid];
 
-       setupscenecoords(gdi);
+       setupscenecoords(gdi, monid);
        return gdi->bm.hbm != NULL;
 }
 
index efa4e72aa8458991209c9e4ea22d3f944caf4227..317f95b5392c0e465002330496c5a2dc2e794ad8 100644 (file)
@@ -3051,6 +3051,7 @@ void gfx_set_picasso_modeinfo(int monid, RGBFTYPE rgbfmt)
 #ifdef RETROPLATFORM
        rp_set_hwnd(mon->hAmigaWnd);
 #endif
+       target_graphics_buffer_update(monid);
 }
 #endif