[rcore] [GLFW] [SDL2] Updates CORE.Window.eventWaiting
and FLAG_WINDOW_ALWAYS_RUN
handling (#4642)
* Add implementation for CORE.Window.eventWaiting on PLATFORM_DESKTOP_SDL * Optimize GetFrameTime() reset * Optimize FLAG_WINDOW_ALWAYS_RUN and GetFrameTime() reset for PLATFORM_DESKTOP_GLFW
This commit is contained in:
parent
75b6b825df
commit
5b822585e5
2 changed files with 11 additions and 13 deletions
|
@ -1248,12 +1248,13 @@ void PollInputEvents(void)
|
||||||
|
|
||||||
CORE.Window.resizedLastFrame = false;
|
CORE.Window.resizedLastFrame = false;
|
||||||
|
|
||||||
if (CORE.Window.eventWaiting) glfwWaitEvents(); // Wait for in input events before continue (drawing is paused)
|
if ((CORE.Window.eventWaiting) || (IsWindowState(FLAG_WINDOW_MINIMIZED) && !IsWindowState(FLAG_WINDOW_ALWAYS_RUN)))
|
||||||
|
{
|
||||||
|
glfwWaitEvents(); // Wait for in input events before continue (drawing is paused)
|
||||||
|
CORE.Time.previous = GetTime();
|
||||||
|
}
|
||||||
else glfwPollEvents(); // Poll input events: keyboard/mouse/window events (callbacks) -> Update keys state
|
else glfwPollEvents(); // Poll input events: keyboard/mouse/window events (callbacks) -> Update keys state
|
||||||
|
|
||||||
// While window minimized, stop loop execution
|
|
||||||
while (IsWindowState(FLAG_WINDOW_MINIMIZED) && !IsWindowState(FLAG_WINDOW_ALWAYS_RUN)) glfwWaitEvents();
|
|
||||||
|
|
||||||
CORE.Window.shouldClose = glfwWindowShouldClose(platform.handle);
|
CORE.Window.shouldClose = glfwWindowShouldClose(platform.handle);
|
||||||
|
|
||||||
// Reset close status for next frame
|
// Reset close status for next frame
|
||||||
|
@ -1739,12 +1740,7 @@ static void WindowContentScaleCallback(GLFWwindow *window, float scalex, float s
|
||||||
static void WindowIconifyCallback(GLFWwindow *window, int iconified)
|
static void WindowIconifyCallback(GLFWwindow *window, int iconified)
|
||||||
{
|
{
|
||||||
if (iconified) CORE.Window.flags |= FLAG_WINDOW_MINIMIZED; // The window was iconified
|
if (iconified) CORE.Window.flags |= FLAG_WINDOW_MINIMIZED; // The window was iconified
|
||||||
else
|
else CORE.Window.flags &= ~FLAG_WINDOW_MINIMIZED; // The window was restored
|
||||||
{
|
|
||||||
CORE.Window.flags &= ~FLAG_WINDOW_MINIMIZED; // The window was restored
|
|
||||||
|
|
||||||
if ((CORE.Window.flags & FLAG_WINDOW_ALWAYS_RUN) == 0) CORE.Time.previous = GetTime();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GLFW3 WindowMaximize Callback, runs when window is maximized/restored
|
// GLFW3 WindowMaximize Callback, runs when window is maximized/restored
|
||||||
|
|
|
@ -1378,7 +1378,11 @@ void PollInputEvents(void)
|
||||||
|
|
||||||
CORE.Window.resizedLastFrame = false;
|
CORE.Window.resizedLastFrame = false;
|
||||||
|
|
||||||
if (((CORE.Window.flags & FLAG_WINDOW_MINIMIZED) > 0) && ((CORE.Window.flags & FLAG_WINDOW_ALWAYS_RUN) == 0)) SDL_WaitEvent(NULL);
|
if ((CORE.Window.eventWaiting) || (((CORE.Window.flags & FLAG_WINDOW_MINIMIZED) > 0) && ((CORE.Window.flags & FLAG_WINDOW_ALWAYS_RUN) == 0)))
|
||||||
|
{
|
||||||
|
SDL_WaitEvent(NULL);
|
||||||
|
CORE.Time.previous = GetTime();
|
||||||
|
}
|
||||||
|
|
||||||
SDL_Event event = { 0 };
|
SDL_Event event = { 0 };
|
||||||
while (SDL_PollEvent(&event) != 0)
|
while (SDL_PollEvent(&event) != 0)
|
||||||
|
@ -1499,8 +1503,6 @@ void PollInputEvents(void)
|
||||||
if ((CORE.Window.flags & SDL_WINDOW_MAXIMIZED) > 0) CORE.Window.flags &= ~SDL_WINDOW_MAXIMIZED;
|
if ((CORE.Window.flags & SDL_WINDOW_MAXIMIZED) > 0) CORE.Window.flags &= ~SDL_WINDOW_MAXIMIZED;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((CORE.Window.flags & FLAG_WINDOW_ALWAYS_RUN) == 0) CORE.Time.previous = GetTime();
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case SDL_WINDOWEVENT_HIDDEN:
|
case SDL_WINDOWEVENT_HIDDEN:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue