#include "MiniFB.h" #include "MiniFB_internal.h" #include //------------------------------------- double g_timer_frequency; double g_timer_resolution; double g_time_for_frame = 1.0 / 60.0; //------------------------------------- extern uint64_t mfb_timer_tick(void); extern void mfb_timer_init(void); //------------------------------------- void mfb_set_target_fps(uint32_t fps) { if(fps == 0) { g_time_for_frame = 0; } else { g_time_for_frame = 1.0 / fps; } } //------------------------------------- struct mfb_timer * mfb_timer_create() { static int once = 1; mfb_timer *tmr; if(once) { once = 0; mfb_timer_init(); } tmr = malloc(sizeof(mfb_timer)); mfb_timer_reset(tmr); return tmr; } //------------------------------------- void mfb_timer_destroy(struct mfb_timer *tmr) { if(tmr != 0x0) { free(tmr); } } //------------------------------------- void mfb_timer_reset(struct mfb_timer *tmr) { if(tmr == 0x0) return; tmr->start_time = mfb_timer_tick(); tmr->delta_counter = tmr->start_time; tmr->time = 0; } //------------------------------------- double mfb_timer_now(struct mfb_timer *tmr) { uint64_t counter; if(tmr == 0x0) return 0.0; counter = mfb_timer_tick(); tmr->time += (counter - tmr->start_time); tmr->start_time = counter; return tmr->time * g_timer_resolution; } //------------------------------------- double mfb_timer_delta(struct mfb_timer *tmr) { int64_t counter; uint64_t delta; if(tmr == 0x0) return 0.0; counter = mfb_timer_tick(); delta = (counter - tmr->delta_counter); tmr->delta_counter = counter; return delta * g_timer_resolution; } //------------------------------------- double mfb_timer_get_frequency() { return g_timer_frequency; } //------------------------------------- double mfb_timer_get_resolution() { return g_timer_resolution; }