diff options
| author | David Caruso <dcaruso@meta.com> | 2024-02-22 14:45:58 -0800 |
|---|---|---|
| committer | David Caruso <dcaruso@meta.com> | 2024-02-23 10:39:13 -0800 |
| commit | b921294a09c2fe6cc7df0b8cdf8af0c87ddb07af (patch) | |
| tree | 335982c6b3fdef1c992abb4f093dfde10dc3dc74 /sokol_app.h | |
| parent | 6a13a96d58a1d2ad88161d9dddb7843e541803a9 (diff) | |
[sokol_app] add SOKOL_EMSC_USE_SET_MAIN_LOOP #define
Diffstat (limited to 'sokol_app.h')
| -rw-r--r-- | sokol_app.h | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/sokol_app.h b/sokol_app.h index 064a72f9..59a60341 100644 --- a/sokol_app.h +++ b/sokol_app.h @@ -1711,6 +1711,7 @@ typedef struct sapp_desc { bool html5_bubble_wheel_events; // same for wheel events bool html5_bubble_key_events; // if true, bubble up *all* key events to browser, not just key events that represent characters bool html5_bubble_char_events; // if true, bubble up character events to browser + bool html5_use_emsc_set_main_loop; // if true, use set_main_loop instead of request_animation_frame_loop bool ios_keyboard_resizes_canvas; // if true, showing the iOS keyboard shrinks the canvas } sapp_desc; @@ -5806,7 +5807,7 @@ _SOKOL_PRIVATE void _sapp_emsc_unregister_eventhandlers(void) { #endif } -_SOKOL_PRIVATE EM_BOOL _sapp_emsc_frame(double time, void* userData) { +_SOKOL_PRIVATE EM_BOOL _sapp_emsc_frame_animation_loop(double time, void* userData) { _SOKOL_UNUSED(userData); _sapp_timing_external(&_sapp.timing, time / 1000.0); @@ -5833,6 +5834,13 @@ _SOKOL_PRIVATE EM_BOOL _sapp_emsc_frame(double time, void* userData) { return EM_TRUE; } +_SOKOL_PRIVATE void _sapp_emsc_frame_main_loop(void) { + const double time = emscripten_performance_now(); + if(!_sapp_emsc_frame_animation_loop(time, NULL)) { + emscripten_cancel_main_loop(); + } +} + _SOKOL_PRIVATE void _sapp_emsc_run(const sapp_desc* desc) { _sapp_init_state(desc); sapp_js_init(&_sapp.html5_canvas_selector[1]); @@ -5863,8 +5871,11 @@ _SOKOL_PRIVATE void _sapp_emsc_run(const sapp_desc* desc) { sapp_set_icon(&desc->icon); // start the frame loop - emscripten_request_animation_frame_loop(_sapp_emsc_frame, 0); - + if (_sapp.desc.html5_use_emsc_set_main_loop) { + emscripten_set_main_loop(_sapp_emsc_frame_main_loop, 0, false); + } else { + emscripten_request_animation_frame_loop(_sapp_emsc_frame_animation_loop, 0); + } // NOT A BUG: do not call _sapp_discard_state() here, instead this is // called in _sapp_emsc_frame() when the application is ordered to quit } |