From a2413c4fadf8e561e8eeb9d4b6b338a4f7f8789b Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Wed, 11 Mar 2020 11:28:17 -0700 Subject: [PATCH] Send both update and render events on Windows resize/move --- project/src/backend/sdl/SDLApplication.cpp | 51 ++++++++++++---------- project/src/backend/sdl/SDLApplication.h | 1 + 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/project/src/backend/sdl/SDLApplication.cpp b/project/src/backend/sdl/SDLApplication.cpp index e42d8efec..b7c61effb 100644 --- a/project/src/backend/sdl/SDLApplication.cpp +++ b/project/src/backend/sdl/SDLApplication.cpp @@ -127,26 +127,7 @@ namespace lime { case SDL_USEREVENT: - if (!inBackground) { - - currentUpdate = SDL_GetTicks (); - applicationEvent.type = UPDATE; - applicationEvent.deltaTime = currentUpdate - lastUpdate; - lastUpdate = currentUpdate; - - nextUpdate += framePeriod; - - while (nextUpdate <= currentUpdate) { - - nextUpdate += framePeriod; - - } - - ApplicationEvent::Dispatch (&applicationEvent); - RenderEvent::Dispatch (&renderEvent); - - } - + SendUpdateEvent(); break; case SDL_APP_WILLENTERBACKGROUND: @@ -827,6 +808,31 @@ namespace lime { } + void SDLApplication::SendUpdateEvent () { + + if (!inBackground) { + + currentUpdate = SDL_GetTicks (); + applicationEvent.type = UPDATE; + applicationEvent.deltaTime = currentUpdate - lastUpdate; + lastUpdate = currentUpdate; + + nextUpdate += framePeriod; + + while (nextUpdate <= currentUpdate) { + + nextUpdate += framePeriod; + + } + + ApplicationEvent::Dispatch (&applicationEvent); + RenderEvent::Dispatch (&renderEvent); + + } + + } + + void SDLApplication::SetFrameRate (double frameRate) { if (frameRate > 0) { @@ -1014,14 +1020,11 @@ namespace lime { winTimerActive = SetTimer (GetActiveWindow (), winTimerID, currentApplication->framePeriod, nullptr); - // TODO: Are we thread-safe to call GL here? - RenderEvent::Dispatch (¤tApplication->renderEvent); - } else if (message.msg == WM_TIMER) { if (message.wParam == winTimerID) { - RenderEvent::Dispatch (¤tApplication->renderEvent); + currentApplication->SendUpdateEvent (); } diff --git a/project/src/backend/sdl/SDLApplication.h b/project/src/backend/sdl/SDLApplication.h index 6ad6e0e84..d13c7f56d 100644 --- a/project/src/backend/sdl/SDLApplication.h +++ b/project/src/backend/sdl/SDLApplication.h @@ -50,6 +50,7 @@ namespace lime { void ProcessTextEvent (SDL_Event* event); void ProcessTouchEvent (SDL_Event* event); void ProcessWindowEvent (SDL_Event* event); + void SendUpdateEvent (); int WaitEvent (SDL_Event* event); static void UpdateFrame ();