diff --git a/src/render_soft.c b/src/render_soft.c index 3322dcf..d9f94db 100644 --- a/src/render_soft.c +++ b/src/render_soft.c @@ -55,19 +55,19 @@ DWORD WINAPI render_soft_main(void) while (ddraw->render.run && WaitForSingleObject(ddraw->render.sem, INFINITE) != WAIT_FAILED) { + BOOL skipFrame = FALSE; + if (maxFPS > 0) { DWORD curTick = timeGetTime(); if (lastTick + frameLength > curTick) - { - SetEvent(ddraw->render.ev); - continue; - } - lastTick = curTick; + skipFrame = TRUE; + else + lastTick = curTick; } #if _DEBUG - DrawFrameInfoStart(); + if (!skipFrame) DrawFrameInfoStart(); #endif EnterCriticalSection(&ddraw->cs); @@ -113,7 +113,7 @@ DWORD WINAPI render_soft_main(void) DIB_RGB_COLORS, SRCCOPY); } - else if (!ChildWindowExists && (ddraw->render.width != ddraw->width || ddraw->render.height != ddraw->height)) + else if (!skipFrame && !ChildWindowExists && (ddraw->render.width != ddraw->width || ddraw->render.height != ddraw->height)) { StretchDIBits( ddraw->render.hDC, @@ -130,7 +130,7 @@ DWORD WINAPI render_soft_main(void) DIB_RGB_COLORS, SRCCOPY); } - else + else if (!skipFrame || ChildWindowExists) { SetDIBitsToDevice( ddraw->render.hDC, @@ -151,7 +151,7 @@ DWORD WINAPI render_soft_main(void) LeaveCriticalSection(&ddraw->cs); #if _DEBUG - DrawFrameInfoEnd(); + if (!skipFrame) DrawFrameInfoEnd(); #endif SetEvent(ddraw->render.ev);