check if resolution is valid without upscaling before trying to upscale 2x
This commit is contained in:
parent
1602aaf240
commit
468e350528
1 changed files with 53 additions and 66 deletions
37
src/dd.c
37
src/dd.c
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue