diff --git a/base/sources/iron_sys.c b/base/sources/iron_sys.c index 6639f04f..ce86b930 100644 --- a/base/sources/iron_sys.c +++ b/base/sources/iron_sys.c @@ -422,13 +422,6 @@ i32 sys_y(void) { return 0; } -static void _sys_run_callbacks(any_array_t *cbs) { - for (i32 i = 0; i < (i32)cbs->length; ++i) { - callback_t *cb = cbs->buffer[i]; - cb->f(cb->data); - } -} - f32 sys_delta(void) { if (_sys_time_frequency < 0) { _sys_time_frequency = sys_display_frequency(); @@ -440,22 +433,31 @@ f32 sys_real_delta(void) { return _sys_time_real_delta; } +static void _sys_run_callbacks(any_array_t *cbs, i32 len) { + for (i32 i = 0; i < len; ++i) { + callback_t *cb = cbs->buffer[i]; + cb->f(cb->data); + } +} + void sys_render(void) { if (_sys_on_next_frames->length > 0) { - _sys_run_callbacks(_sys_on_next_frames); - array_splice(_sys_on_next_frames, 0, _sys_on_next_frames->length); + i32 len = _sys_on_next_frames->length; + _sys_run_callbacks(_sys_on_next_frames, len); + array_splice(_sys_on_next_frames, 0, len); } - _sys_run_callbacks(_sys_on_updates); + _sys_run_callbacks(_sys_on_updates, _sys_on_updates->length); if (iron_window_width() > 0 && iron_window_height() > 0) { scene_render_frame(); - _sys_run_callbacks(_sys_on_renders); + _sys_run_callbacks(_sys_on_renders, _sys_on_renders->length); } if (_sys_on_end_frames->length > 0) { - _sys_run_callbacks(_sys_on_end_frames); - array_splice(_sys_on_end_frames, 0, _sys_on_end_frames->length); + i32 len = _sys_on_end_frames->length; + _sys_run_callbacks(_sys_on_end_frames, len); + array_splice(_sys_on_end_frames, 0, len); } input_end_frame();