From dc3be1243ac720827c1ce1c3dc6e7fb26eb33685 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Tue, 12 Dec 2023 00:39:25 +0100 Subject: [PATCH] #269 add workaround for Quest for Glory 5 movies --- inc/IDirectDrawSurface.h | 1 + src/ddsurface.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/inc/IDirectDrawSurface.h b/inc/IDirectDrawSurface.h index 5c1a26d..e339450 100644 --- a/inc/IDirectDrawSurface.h +++ b/inc/IDirectDrawSurface.h @@ -42,6 +42,7 @@ typedef struct IDirectDrawSurfaceImpl DWORD last_flip_tick; DWORD last_blt_tick; BOOL queried; + BOOL skip_flip; /* Quest for Glory 5 */ struct IDirectDrawSurfaceImpl* backbuffer; struct IDirectDrawClipperImpl* clipper; diff --git a/src/ddsurface.c b/src/ddsurface.c index cbea99f..29314bd 100644 --- a/src/ddsurface.c +++ b/src/ddsurface.c @@ -747,7 +747,7 @@ HRESULT dds_Flip(IDirectDrawSurfaceImpl* This, IDirectDrawSurfaceImpl* lpDDSurfa { dbg_dump_dds_flip_flags(dwFlags); - if (This->backbuffer) + if (This->backbuffer && !This->skip_flip) { EnterCriticalSection(&g_ddraw->cs); IDirectDrawSurfaceImpl* backbuffer = lpDDSurfaceTargetOverride ? lpDDSurfaceTargetOverride : This->backbuffer; @@ -775,6 +775,8 @@ HRESULT dds_Flip(IDirectDrawSurfaceImpl* This, IDirectDrawSurfaceImpl* lpDDSurfa } } + This->skip_flip = FALSE; + if ((This->caps & DDSCAPS_PRIMARYSURFACE) && g_ddraw && g_ddraw->render.run) { This->last_flip_tick = timeGetTime(); @@ -1318,6 +1320,8 @@ HRESULT dd_CreateSurface( g_ddraw->primary->height == g_ddraw->height && g_ddraw->primary->bpp == g_ddraw->bpp) { + g_ddraw->primary->skip_flip = TRUE; + *lpDDSurface = g_ddraw->primary; IDirectDrawSurface_AddRef(g_ddraw->primary);