check if resolution is valid without upscaling before trying to upscale 2x

This commit is contained in:
FunkyFr3sh 2021-10-08 14:27:32 +02:00
parent 1602aaf240
commit 468e350528

View file

@ -419,32 +419,8 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
} }
} }
if (dwFlags & SDM_LEAVE_WINDOWED)
{
memset(&g_ddraw->render.mode, 0, sizeof(DEVMODE));
g_ddraw->render.mode.dmSize = sizeof(DEVMODE);
g_ddraw->render.mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width;
g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height;
if (g_ddraw->render.bpp)
{
g_ddraw->render.mode.dmFields |= DM_BITSPERPEL;
g_ddraw->render.mode.dmBitsPerPel = g_ddraw->render.bpp;
}
if (ChangeDisplaySettings(&g_ddraw->render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL)
{
g_ddraw->render.width = g_ddraw->width;
g_ddraw->render.height = g_ddraw->height;
}
}
else
{
g_ddraw->render.width = g_config.window_rect.right; g_ddraw->render.width = g_config.window_rect.right;
g_ddraw->render.height = g_config.window_rect.bottom; g_ddraw->render.height = g_config.window_rect.bottom;
}
/* temporary fix: center window for games that keep changing their resolution */ /* temporary fix: center window for games that keep changing their resolution */
if (g_ddraw->width && if (g_ddraw->width &&
@ -528,6 +504,15 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
g_ddraw->windowed = TRUE; g_ddraw->windowed = TRUE;
} }
else else
{
/* Try without upscaling */
g_ddraw->render.width = g_ddraw->width;
g_ddraw->render.height = g_ddraw->height;
g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width;
g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height;
if (ChangeDisplaySettings(&g_ddraw->render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL)
{ {
/* Try 2x scaling */ /* Try 2x scaling */
g_ddraw->render.width *= 2; g_ddraw->render.width *= 2;
@ -569,7 +554,8 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width; g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width;
g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height; g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height;
if (!found_res || ChangeDisplaySettings(&g_ddraw->render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) if (!found_res ||
ChangeDisplaySettings(&g_ddraw->render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL)
{ {
/* try current display settings */ /* try current display settings */
g_ddraw->render.width = g_ddraw->mode.dmPelsWidth; g_ddraw->render.width = g_ddraw->mode.dmPelsWidth;
@ -594,6 +580,7 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
} }
} }
} }
}
g_ddraw->render.viewport.width = g_ddraw->render.width; g_ddraw->render.viewport.width = g_ddraw->render.width;
g_ddraw->render.viewport.height = g_ddraw->render.height; g_ddraw->render.viewport.height = g_ddraw->render.height;