1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

force "adjmouse = TRUE" when downscaling was detected

This commit is contained in:
FunkyFr3sh 2023-09-13 19:04:01 +02:00
parent 6c0a639f1d
commit f468788a9d
3 changed files with 23 additions and 1 deletions

View File

@ -42,6 +42,7 @@ typedef struct IDirectDrawSurfaceImpl
DWORD last_flip_tick;
DWORD last_blt_tick;
BOOL queried;
BOOL locked;
struct IDirectDrawSurfaceImpl* backbuffer;
struct IDirectDrawClipperImpl* clipper;

View File

@ -713,6 +713,13 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
if (!found_res ||
ChangeDisplaySettings(&g_ddraw->render.mode, CDS_TEST) != DISP_CHANGE_SUCCESSFUL)
{
if (g_ddraw->width > g_ddraw->mode.dmPelsWidth ||
g_ddraw->height > g_ddraw->mode.dmPelsHeight)
{
/* Downscaling requires adjmouse to be enabled */
g_ddraw->adjmouse = TRUE;
}
/* try current display settings */
g_ddraw->render.width = g_ddraw->mode.dmPelsWidth;
g_ddraw->render.height = g_ddraw->mode.dmPelsHeight;
@ -1171,6 +1178,9 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags)
HRESULT dd_WaitForVerticalBlank(DWORD dwFlags, HANDLE hEvent)
{
Sleep(5);
return DD_OK;
if (g_ddraw->maxgameticks == -2)
{
if (fpsl_dwm_flush() || fpsl_wait_for_vblank(g_ddraw->render.maxfps >= 0 && !g_ddraw->vsync))

View File

@ -700,7 +700,7 @@ HRESULT dds_GetSurfaceDesc(IDirectDrawSurfaceImpl* This, LPDDSURFACEDESC lpDDSur
if (This->flags & DDSD_BACKBUFFERCOUNT)
{
lpDDSurfaceDesc->dwFlags |= DDSD_BACKBUFFERCOUNT;
lpDDSurfaceDesc->dwBackBufferCount = This->backbuffer_count;
lpDDSurfaceDesc->dwBackBufferCount = This->backbuffer_count;
}
if (This->bpp == 8)
@ -952,6 +952,8 @@ HRESULT dds_Lock(
if (g_ddraw && g_ddraw->lock_surfaces)
EnterCriticalSection(&This->cs);
This->locked = TRUE;
dbg_dump_dds_lock_flags(dwFlags);
if (g_ddraw && g_ddraw->fixnotresponding && !g_ddraw->wine)
@ -978,6 +980,11 @@ HRESULT dds_Lock(
(char*)dds_GetBuffer(This) + (lpDestRect->left * This->bytes_pp) + (lpDestRect->top * This->pitch);
}
if ((This->caps & DDSCAPS_PRIMARYSURFACE) && (dwFlags & DDLOCK_WAIT))
{
Sleep(5);
}
return ret;
}
@ -1070,6 +1077,8 @@ HRESULT dds_SetPalette(IDirectDrawSurfaceImpl* This, IDirectDrawPaletteImpl* lpD
HRESULT dds_Unlock(IDirectDrawSurfaceImpl* This, LPRECT lpRect)
{
if (!This->locked) return DDERR_NOTLOCKED;
/* Hack for Warcraft II BNE and Diablo */
HWND hwnd = g_ddraw && g_ddraw->bnet_active ? FindWindowEx(HWND_DESKTOP, NULL, "SDlgDialog", NULL) : NULL;
@ -1180,6 +1189,8 @@ HRESULT dds_Unlock(IDirectDrawSurfaceImpl* This, LPRECT lpRect)
}
}
This->locked = FALSE;
if (g_ddraw && g_ddraw->lock_surfaces)
LeaveCriticalSection(&This->cs);