]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
RTG non-squarepixels, not yet implemented
authorToni Wilen <twilen@winuae.net>
Fri, 22 May 2026 15:19:32 +0000 (18:19 +0300)
committerToni Wilen <twilen@winuae.net>
Fri, 22 May 2026 15:19:32 +0000 (18:19 +0300)
include/options.h
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/win32.cpp
od-win32/win32gfx.cpp
od-win32/win32gui.cpp

index 573ff07f505cd77e69090a4ba0bf32ec9b2bc30d..68412f936e25c8832807ceb61f34c3cb702a7ad3 100644 (file)
@@ -926,6 +926,7 @@ struct uae_prefs {
        int win32_iconified_input;
 
        bool win32_rtgallowscaling;
+       bool win32_rtgnonsquarepixels;
        int win32_rtgscaleaspectratio;
        int win32_rtgvblankrate;
        bool win32_borderless;
index 76aa359c5c5fec423a513c1f73f88e36bdb57ea2..b4f6b839982c10f0590edfaf3ad9f980c60336d2 100644 (file)
 #define IDC_RTG_INITIAL_MONITOR         1803
 #define IDC_INFOBOX_TEXT3               1804
 #define IDC_CD_EJECT                    1804
+#define IDC_RTG_NONSQUAREPIXELS         1804
 #define IDC_CD_TEXT                     1805
 #define IDC_CD_TYPE                     1806
 #define IDC_CD_SELECT                   1807
index 713b421d5ca48cc044db6a725db71a6c3123547b..838cbce2777be60936a3cffb4a5494beeb7c8f43 100644 (file)
@@ -1288,7 +1288,7 @@ BEGIN
     COMBOBOX        IDC_RTG_16BIT,296,113,82,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
     COMBOBOX        IDC_RTG_24BIT,296,131,82,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
     COMBOBOX        IDC_RTG_32BIT,296,148,82,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_RTG_DISPLAYSELECT,11,188,371,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
+    COMBOBOX        IDC_RTG_DISPLAYSELECT,11,197,371,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
     CTEXT           "Refresh rate:",IDC_STATIC,30,212,83,10,SS_CENTERIMAGE
     COMBOBOX        IDC_RTG_VBLANKRATE,29,227,84,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
     CTEXT           "Buffer mode:",IDC_STATIC,154,212,83,10,SS_CENTERIMAGE
@@ -1300,6 +1300,8 @@ BEGIN
     LTEXT           "Active output:",IDC_STATIC,249,37,62,10,NOT WS_VISIBLE,WS_EX_RIGHT
     CONTROL         "Override initial native chipset display",IDC_RTG_INITIAL_MONITOR,
                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,249,63,131,10
+    CONTROL         "Scale if non-square pixels",IDC_RTG_NONSQUAREPIXELS,
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,182,161,10
 END
 
 IDD_INPUTMAP DIALOGEX 0, 0, 421, 293
index cbe387ff3e1727dbcb0d29a3e22535bb6a6aac69..b42ce19836ff8f6c86a9daa3a690dfda5a509e31 100644 (file)
@@ -4508,6 +4508,7 @@ void target_default_options (struct uae_prefs *p, int type)
                p->gf[GF_RTG].gfx_filter_autoscale = RTG_MODE_SCALE;
                p->win32_rtgallowscaling = 0;
                p->win32_rtgscaleaspectratio = -1;
+               p->win32_rtgnonsquarepixels = false;
                p->win32_rtgvblankrate = 0;
                p->rtg_hardwaresprite = true;
                p->rtg_overlay = true;
@@ -4617,7 +4618,8 @@ void target_save_options (struct zfile *f, struct uae_prefs *p)
                        
        cfgfile_target_dwrite_bool(f, _T("rtg_scale_small"), p->gf[GF_RTG].gfx_filter_autoscale == 1);
        cfgfile_target_dwrite_bool(f, _T("rtg_scale_center"), p->gf[GF_RTG].gfx_filter_autoscale == 2);
-       cfgfile_target_dwrite_bool (f, _T("rtg_scale_allow"), p->win32_rtgallowscaling);
+       cfgfile_target_dwrite_bool(f, _T("rtg_scale_allow"), p->win32_rtgallowscaling);
+       cfgfile_target_dwrite_bool(f, _T("rtg_scale_nonsquarepixels"), p->win32_rtgnonsquarepixels);
        cfgfile_target_dwrite (f, _T("rtg_scale_aspect_ratio"), _T("%d:%d"),
                p->win32_rtgscaleaspectratio >= 0 ? (p->win32_rtgscaleaspectratio / ASPECTMULT) : -1,
                p->win32_rtgscaleaspectratio >= 0 ? (p->win32_rtgscaleaspectratio & (ASPECTMULT - 1)) : -1);
@@ -4860,6 +4862,8 @@ static int target_parse_option_host(struct uae_prefs *p, const TCHAR *option, co
        }
        if (cfgfile_yesno(option, value, _T("rtg_scale_allow"), &p->win32_rtgallowscaling))
                return 1;
+       if (cfgfile_yesno(option, value, _T("rtg_scale_nonsquarepixels"), &p->win32_rtgnonsquarepixels))
+               return 1;
 
        if (cfgfile_intval(option, value, _T("soundcard"), &p->win32_soundcard, 1)) {
                if (p->win32_soundcard < 0 || p->win32_soundcard >= MAX_SOUND_DEVICES || sound_devices[p->win32_soundcard] == NULL)
index 6e1a04a5d2ca74a7f4fa1397d3ed57c4608ce84a..97d0802ded2ec01063aa3066585ace8d902137ff 100644 (file)
@@ -1398,6 +1398,7 @@ int lockscr(struct vidbuffer *vb, bool fullupdate, bool skip)
        if (vb->vram_buffer) {
                vb->bufmem = D3D_locktexture(vb->monitor_id, &vb->rowbytes, &vb->width_allocated, &vb->height_allocated, skip ? -1 : (fullupdate ? 1 : 0));
                if (vb->bufmem) {
+                       vb->bufmemend = vb->bufmem + vb->rowbytes * vb->height_allocated;
                        ret = 1;
                }
        } else {
@@ -1417,6 +1418,7 @@ void unlockscr(struct vidbuffer *vb, int y_start, int y_end)
        vb->locked = false;
        if (vb->vram_buffer) {
                vb->bufmem = NULL;
+               vb->bufmemend = NULL;
                D3D_unlocktexture(vb->monitor_id, y_start, y_end);
        }
        gfx_unlock();
@@ -1479,7 +1481,7 @@ void getrtgfilterdata(int monid, struct displayscale *ds)
                picasso_offset_my *= currprefs.gf[GF_RTG].gfx_filter_vert_zoom_mult;
        }
 
-       if (!mon->scalepicasso)
+       if (!mon->scalepicasso || currprefs.win32_rtgnonsquarepixels)
                return;
 
        int srcratio, dstratio;
index de06e98c60e6b919f1e87fe8bb64b40a2332b257..913f58c6acacac504374ed51949f8f698f2561bc 100644 (file)
@@ -11654,6 +11654,8 @@ static void enable_for_expansiondlg(HWND hDlg)
        ew(hDlg, IDC_RTG_SCALE, rtg2);
        ew(hDlg, IDC_RTG_CENTER, rtg2);
        ew(hDlg, IDC_RTG_INTEGERSCALE, rtg2);
+       ew(hDlg, IDC_RTG_NONSQUAREPIXELS, rtg2);
+       hide(hDlg, IDC_RTG_NONSQUAREPIXELS, TRUE); // not yet implemen ted
        ew(hDlg, IDC_RTG_SCALE_ALLOW, rtg2);
        ew(hDlg, IDC_RTG_SCALE_ASPECTRATIO, rtg2);
        ew(hDlg, IDC_RTG_VBLANKRATE, rtg2);
@@ -11778,6 +11780,7 @@ static void values_to_expansiondlg(HWND hDlg)
        CheckDlgButton(hDlg, IDC_RTG_SCALE, workprefs.gf[1].gfx_filter_autoscale == RTG_MODE_SCALE);
        CheckDlgButton(hDlg, IDC_RTG_CENTER, workprefs.gf[1].gfx_filter_autoscale == RTG_MODE_CENTER);
        CheckDlgButton(hDlg, IDC_RTG_INTEGERSCALE, workprefs.gf[1].gfx_filter_autoscale == RTG_MODE_INTEGER_SCALE);
+       CheckDlgButton(hDlg, IDC_RTG_NONSQUAREPIXELS, workprefs.win32_rtgnonsquarepixels);
        CheckDlgButton(hDlg, IDC_RTG_SCALE_ALLOW, workprefs.win32_rtgallowscaling);
        CheckDlgButton(hDlg, IDC_RTG_VBINTERRUPT, workprefs.rtg_hardwareinterrupt);
        CheckDlgButton(hDlg, IDC_RTG_HWSPRITE, workprefs.rtg_hardwaresprite);
@@ -11929,6 +11932,13 @@ static INT_PTR CALLBACK ExpansionDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP
                                workprefs.gf[1].gfx_filter_autoscale = ischecked(hDlg, IDC_RTG_INTEGERSCALE) ? RTG_MODE_INTEGER_SCALE : 0;
                                setchecked(hDlg, IDC_RTG_SCALE, false);
                                setchecked(hDlg, IDC_RTG_CENTER, false);
+                               setchecked(hDlg, IDC_RTG_NONSQUAREPIXELS, false);
+                               break;
+                       case IDC_RTG_NONSQUAREPIXELS:
+                               workprefs.win32_rtgnonsquarepixels = ischecked(hDlg, IDC_RTG_NONSQUAREPIXELS);
+                               if (workprefs.win32_rtgnonsquarepixels) {
+                                       setchecked(hDlg, IDC_RTG_INTEGERSCALE, false);
+                               }
                                break;
                        case IDC_RTG_SCALE_ALLOW:
                                workprefs.win32_rtgallowscaling = ischecked(hDlg, IDC_RTG_SCALE_ALLOW);