From 3041f3d9485b08496caf27c31a02d66a5aab2c36 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Fri, 22 May 2026 18:19:32 +0300 Subject: [PATCH] RTG non-squarepixels, not yet implemented --- include/options.h | 1 + od-win32/resources/resource.h | 1 + od-win32/resources/winuae.rc | 4 +++- od-win32/win32.cpp | 6 +++++- od-win32/win32gfx.cpp | 4 +++- od-win32/win32gui.cpp | 10 ++++++++++ 6 files changed, 23 insertions(+), 3 deletions(-) diff --git a/include/options.h b/include/options.h index 573ff07f..68412f93 100644 --- a/include/options.h +++ b/include/options.h @@ -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; diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h index 76aa359c..b4f6b839 100644 --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -1286,6 +1286,7 @@ #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 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index 713b421d..838cbce2 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -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 diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index cbe387ff..b42ce198 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -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) diff --git a/od-win32/win32gfx.cpp b/od-win32/win32gfx.cpp index 6e1a04a5..97d0802d 100644 --- a/od-win32/win32gfx.cpp +++ b/od-win32/win32gfx.cpp @@ -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; diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index de06e98c..913f58c6 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -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); -- 2.47.3