1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-24 17:49:52 +01:00

keep trying to ReleaseDirect3D in case the first try fails

This commit is contained in:
FunkyFr3sh 2018-10-14 20:09:44 +02:00
parent f70a085f08
commit 227bbc8280
2 changed files with 9 additions and 10 deletions

View File

@ -2,7 +2,7 @@
#define vxstr(a,b,c,d) str(a##.##b##.##c##.##d) #define vxstr(a,b,c,d) str(a##.##b##.##c##.##d)
#define str(s) #s #define str(s) #s
#define VERSION 1,2,1,0 #define VERSION 1,2,1,1
1 VERSIONINFO 1 VERSIONINFO
FILEVERSION VERSION FILEVERSION VERSION

View File

@ -237,6 +237,8 @@ static void Render()
DWORD tickStart = 0; DWORD tickStart = 0;
DWORD tickEnd = 0; DWORD tickEnd = 0;
BOOL active = TRUE; BOOL active = TRUE;
BOOL released = TRUE;
LONG minimized = TRUE;
while (ddraw->render.run && WaitForSingleObject(ddraw->render.sem, 200) != WAIT_FAILED) while (ddraw->render.run && WaitForSingleObject(ddraw->render.sem, 200) != WAIT_FAILED)
{ {
@ -244,6 +246,9 @@ static void Render()
{ {
Sleep(500); Sleep(500);
if (!released && (released = ReleaseDirect3D()) && minimized)
ShowWindow(ddraw->hWnd, SW_MINIMIZE);
if (!InterlockedExchangeAdd(&ddraw->minimized, 0) && CreateDirect3D()) if (!InterlockedExchangeAdd(&ddraw->minimized, 0) && CreateDirect3D())
{ {
active = TRUE; active = TRUE;
@ -319,21 +324,15 @@ static void Render()
HRESULT hr = D3dDev->lpVtbl->TestCooperativeLevel(D3dDev); HRESULT hr = D3dDev->lpVtbl->TestCooperativeLevel(D3dDev);
LONG modeChanged = InterlockedExchange(&ddraw->displayModeChanged, FALSE); LONG modeChanged = InterlockedExchange(&ddraw->displayModeChanged, FALSE);
LONG minimized = InterlockedExchangeAdd(&ddraw->minimized, 0); minimized = InterlockedExchangeAdd(&ddraw->minimized, 0);
if (minimized || modeChanged) if (minimized || modeChanged)
{ {
active = FALSE; active = FALSE;
BOOL released = ReleaseDirect3D(); released = ReleaseDirect3D();
Sleep(100);
if (minimized) if (released && minimized)
{
ShowWindow(ddraw->hWnd, SW_MINIMIZE); ShowWindow(ddraw->hWnd, SW_MINIMIZE);
if (!released)
ChangeDisplaySettings(&ddraw->mode, 0);
}
} }
else if (hr == D3DERR_DEVICENOTRESET && D3dpp.Windowed) else if (hr == D3DERR_DEVICENOTRESET && D3dpp.Windowed)
{ {