Let the platform handle the game loop in case it has some existing callback method (like web does)
This commit is contained in:
parent
41a3934f2a
commit
f95bd9d997
10 changed files with 105 additions and 16 deletions
|
|
@ -1603,4 +1603,15 @@ static int android_close(void *cookie)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void ProcessSingleFrame();
|
||||||
|
|
||||||
|
void PlatformRunGameLoop()
|
||||||
|
{
|
||||||
|
while (CORE.Window.updateCallback != NULL)
|
||||||
|
{
|
||||||
|
ProcessSingleFrame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// EOF
|
// EOF
|
||||||
|
|
|
||||||
|
|
@ -2249,4 +2249,22 @@ static void JoystickCallback(int jid, int event)
|
||||||
# define WIN32_CLIPBOARD_IMPLEMENTATION
|
# define WIN32_CLIPBOARD_IMPLEMENTATION
|
||||||
# include "../external/win32_clipboard.h"
|
# include "../external/win32_clipboard.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern void ProcessSingleFrame();
|
||||||
|
#if defined(PLATFORM_WEB)
|
||||||
|
#include <emscripten.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void PlatformRunGameLoop()
|
||||||
|
{
|
||||||
|
#if defined(PLATFORM_WEB)
|
||||||
|
emscripten_set_main_loop(ProcessSingleFrame, 0, 1);
|
||||||
|
#else
|
||||||
|
while (CORE.Window.updateCallback != NULL)
|
||||||
|
{
|
||||||
|
ProcessSingleFrame();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
// EOF
|
// EOF
|
||||||
|
|
|
||||||
|
|
@ -2100,3 +2100,14 @@ double GetTimeSeconds(void)
|
||||||
|
|
||||||
return currentTime;
|
return currentTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void ProcessSingleFrame();
|
||||||
|
|
||||||
|
void PlatformRunGameLoop()
|
||||||
|
{
|
||||||
|
while (CORE.Window.updateCallback != NULL)
|
||||||
|
{
|
||||||
|
ProcessSingleFrame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2312,3 +2312,13 @@ static void UpdateTouchPointsSDL(SDL_TouchFingerEvent event)
|
||||||
|
|
||||||
for (int i = CORE.Input.Touch.pointCount; i < MAX_TOUCH_POINTS; i++) CORE.Input.Touch.currentTouchState[i] = 0;
|
for (int i = CORE.Input.Touch.pointCount; i < MAX_TOUCH_POINTS; i++) CORE.Input.Touch.currentTouchState[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void ProcessSingleFrame();
|
||||||
|
|
||||||
|
void PlatformRunGameLoop()
|
||||||
|
{
|
||||||
|
while (CORE.Window.updateCallback != NULL)
|
||||||
|
{
|
||||||
|
ProcessSingleFrame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -2275,3 +2275,14 @@ static bool IsWglExtensionAvailable(HDC hdc, const char *extension)
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void ProcessSingleFrame();
|
||||||
|
|
||||||
|
void PlatformRunGameLoop()
|
||||||
|
{
|
||||||
|
while (CORE.Window.updateCallback != NULL)
|
||||||
|
{
|
||||||
|
ProcessSingleFrame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2732,4 +2732,15 @@ static void SetupFramebuffer(int width, int height)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void ProcessSingleFrame();
|
||||||
|
|
||||||
|
void PlatformRunGameLoop()
|
||||||
|
{
|
||||||
|
while (CORE.Window.updateCallback != NULL)
|
||||||
|
{
|
||||||
|
ProcessSingleFrame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// EOF
|
// EOF
|
||||||
|
|
@ -592,4 +592,15 @@ static int kbhit(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern void ProcessSingleFrame();
|
||||||
|
|
||||||
|
void PlatformRunGameLoop()
|
||||||
|
{
|
||||||
|
while (CORE.Window.updateCallback != NULL)
|
||||||
|
{
|
||||||
|
ProcessSingleFrame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// EOF
|
// EOF
|
||||||
|
|
|
||||||
|
|
@ -532,4 +532,14 @@ void ClosePlatform(void)
|
||||||
// TODO: De-initialize graphics, inputs and more
|
// TODO: De-initialize graphics, inputs and more
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void ProcessSingleFrame();
|
||||||
|
|
||||||
|
void PlatformRunGameLoop()
|
||||||
|
{
|
||||||
|
while (CORE.Window.updateCallback != NULL)
|
||||||
|
{
|
||||||
|
ProcessSingleFrame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// EOF
|
// EOF
|
||||||
|
|
|
||||||
|
|
@ -1946,4 +1946,13 @@ static EM_BOOL EmscriptenVisibilityChangeCallback(int eventType, const Emscripte
|
||||||
}
|
}
|
||||||
//-------------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
void void ProcessSingleFrame();
|
||||||
|
|
||||||
|
void RunGameLoop(bool(*processFrame)(void))
|
||||||
|
{
|
||||||
|
emscripten_set_main_loop(ProcessSingleFrame, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// EOF
|
// EOF
|
||||||
|
|
|
||||||
19
src/rcore.c
19
src/rcore.c
|
|
@ -739,8 +739,6 @@ void CloseWindow(void)
|
||||||
TRACELOG(LOG_INFO, "Window closed successfully");
|
TRACELOG(LOG_INFO, "Window closed successfully");
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool RunLoop = false;
|
|
||||||
|
|
||||||
void ProcessSingleFrame(void)
|
void ProcessSingleFrame(void)
|
||||||
{
|
{
|
||||||
// if the dirty callback rendered this frame, don't double render, skip it until the next frame
|
// if the dirty callback rendered this frame, don't double render, skip it until the next frame
|
||||||
|
|
@ -751,7 +749,7 @@ void ProcessSingleFrame(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
RunLoop = CORE.Window.updateCallback();
|
if (!CORE.Window.updateCallback()) CORE.Window.updateCallback = NULL;
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
|
|
||||||
#if SUPPORT_CUSTOM_FRAME_CONTROL
|
#if SUPPORT_CUSTOM_FRAME_CONTROL
|
||||||
|
|
@ -760,23 +758,12 @@ void ProcessSingleFrame(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(PLATFORM_WEB)
|
void PlatformRunGameLoop();
|
||||||
#include <emscripten.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void RunGameLoop(bool(*processFrame)(void))
|
void RunGameLoop(bool(*processFrame)(void))
|
||||||
{
|
{
|
||||||
RunLoop = true;
|
|
||||||
CORE.Window.updateCallback = processFrame;
|
CORE.Window.updateCallback = processFrame;
|
||||||
|
PlatformRunGameLoop();
|
||||||
#if defined(PLATFORM_WEB)
|
|
||||||
emscripten_set_main_loop(ProcessSingleFrame, 0, 1);
|
|
||||||
#else
|
|
||||||
while (RunLoop)
|
|
||||||
{
|
|
||||||
ProcessSingleFrame();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if window has been initialized successfully
|
// Check if window has been initialized successfully
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue