diff --git a/project/src/backend/sdl/SDLApplication.cpp b/project/src/backend/sdl/SDLApplication.cpp index b7c61effb..e42d8efec 100644 --- a/project/src/backend/sdl/SDLApplication.cpp +++ b/project/src/backend/sdl/SDLApplication.cpp @@ -127,7 +127,26 @@ namespace lime { case SDL_USEREVENT: - 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); + + } + break; case SDL_APP_WILLENTERBACKGROUND: @@ -808,31 +827,6 @@ 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) { @@ -1020,11 +1014,14 @@ 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) { - currentApplication->SendUpdateEvent (); + RenderEvent::Dispatch (¤tApplication->renderEvent); } diff --git a/project/src/backend/sdl/SDLApplication.h b/project/src/backend/sdl/SDLApplication.h index d13c7f56d..6ad6e0e84 100644 --- a/project/src/backend/sdl/SDLApplication.h +++ b/project/src/backend/sdl/SDLApplication.h @@ -50,7 +50,6 @@ 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 ();