revert some changes

This commit is contained in:
FunkyFr3sh 2017-11-15 18:42:42 +01:00
parent 9821d80044
commit eb1c261ac7
6 changed files with 63 additions and 21 deletions

43
main.c
View file

@ -231,6 +231,16 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
}
This->render.run = TRUE;
if (This->renderer == render_dummy_main)
{
if(This->render.thread == NULL)
{
This->render.thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)This->renderer, NULL, 0, NULL);
SetThreadPriority(This->render.thread, THREAD_PRIORITY_BELOW_NORMAL);
}
return DD_OK;
}
mouse_unlock();
@ -289,6 +299,12 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
return DDERR_INVALIDMODE;
}
}
if(This->render.thread == NULL)
{
This->render.thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)This->renderer, NULL, 0, NULL);
SetThreadPriority(This->render.thread, THREAD_PRIORITY_BELOW_NORMAL);
}
return DD_OK;
}
@ -374,6 +390,8 @@ void ToggleFullscreen()
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
RECT rc = { 0, 0, ddraw->render.width, ddraw->render.height };
switch(uMsg)
{
case WM_MOVE:
@ -519,6 +537,19 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
}
break;
/* make sure we redraw when WM_PAINT is requested */
case WM_PAINT:
EnterCriticalSection(&ddraw->cs);
ReleaseSemaphore(ddraw->render.sem, 1, NULL);
LeaveCriticalSection(&ddraw->cs);
break;
case WM_ERASEBKGND:
EnterCriticalSection(&ddraw->cs);
FillRect(ddraw->render.hDC, &rc, (HBRUSH) GetStockObject(BLACK_BRUSH));
ReleaseSemaphore(ddraw->render.sem, 1, NULL);
LeaveCriticalSection(&ddraw->cs);
break;
}
return ddraw->WndProc(hWnd, uMsg, wParam, lParam);
@ -621,6 +652,17 @@ ULONG __stdcall ddraw_Release(IDirectDrawImpl *This)
{
PostMessage(This->hWnd, WM_USER, 0, 0);
}
if (This->render.thread)
{
EnterCriticalSection(&This->cs);
HANDLE thread = This->render.thread;
This->render.thread = NULL;
ReleaseSemaphore(This->render.sem, 1, NULL);
LeaveCriticalSection(&This->cs);
WaitForSingleObject(thread, INFINITE);
}
if(This->render.hDC)
{
@ -729,6 +771,7 @@ HRESULT WINAPI DirectDrawCreate(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnk
}
InitializeCriticalSection(&This->cs);
This->render.sem = CreateSemaphore(NULL, 0, 1, NULL);
/* load configuration options from ddraw.ini */
char cwd[MAX_PATH];