From 227bbc8280fce954d1e0febe7640f08c6b91d02b Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 14 Oct 2018 20:09:44 +0200 Subject: [PATCH] keep trying to ReleaseDirect3D in case the first try fails --- ddraw.rc | 2 +- src/render_d3d9.c | 17 ++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/ddraw.rc b/ddraw.rc index 97270f5..bf02e50 100644 --- a/ddraw.rc +++ b/ddraw.rc @@ -2,7 +2,7 @@ #define vxstr(a,b,c,d) str(a##.##b##.##c##.##d) #define str(s) #s -#define VERSION 1,2,1,0 +#define VERSION 1,2,1,1 1 VERSIONINFO FILEVERSION VERSION diff --git a/src/render_d3d9.c b/src/render_d3d9.c index 7183ef1..f52121b 100644 --- a/src/render_d3d9.c +++ b/src/render_d3d9.c @@ -237,6 +237,8 @@ static void Render() DWORD tickStart = 0; DWORD tickEnd = 0; BOOL active = TRUE; + BOOL released = TRUE; + LONG minimized = TRUE; while (ddraw->render.run && WaitForSingleObject(ddraw->render.sem, 200) != WAIT_FAILED) { @@ -244,6 +246,9 @@ static void Render() { Sleep(500); + if (!released && (released = ReleaseDirect3D()) && minimized) + ShowWindow(ddraw->hWnd, SW_MINIMIZE); + if (!InterlockedExchangeAdd(&ddraw->minimized, 0) && CreateDirect3D()) { active = TRUE; @@ -319,21 +324,15 @@ static void Render() HRESULT hr = D3dDev->lpVtbl->TestCooperativeLevel(D3dDev); LONG modeChanged = InterlockedExchange(&ddraw->displayModeChanged, FALSE); - LONG minimized = InterlockedExchangeAdd(&ddraw->minimized, 0); + minimized = InterlockedExchangeAdd(&ddraw->minimized, 0); if (minimized || modeChanged) { active = FALSE; - BOOL released = ReleaseDirect3D(); - Sleep(100); + released = ReleaseDirect3D(); - if (minimized) - { + if (released && minimized) ShowWindow(ddraw->hWnd, SW_MINIMIZE); - - if (!released) - ChangeDisplaySettings(&ddraw->mode, 0); - } } else if (hr == D3DERR_DEVICENOTRESET && D3dpp.Windowed) {