#define __PYNIC_LOG_IMPLIMENT__ #include void ge_engine_init(ge_core_t *core) { // TOOD init all data ge_u8_t* ptr = (ge_u8_t*)core; for (int i = 0; i < (int)sizeof(ge_core_t); i++) { *(ptr + i) = 0; } core->configs.fps = 60; } static inline void ge_init(ge_core_t* core) { /** * check render */ ge_render_t* render_ctx = &core->render; if (render_ctx->content) { Assert(render_ctx->clear && render_ctx->draw && render_ctx->getsize); GE_SAFE_CALL(render_ctx->init, render_ctx); render_ctx->getsize(render_ctx, &render_ctx->screen_size); } Assert(core->timer.sleep_ms != NULL); Assert(core->configs.fps != 0); core->timer.fps_ctl.target_fps = 0; if (core->timer.get_ms != NULL) { ge_fps_init(&core->timer.fps_ctl, core->configs.fps, core->timer.get_ms, core->timer.sleep_ms); } } static inline void ge_render(ge_render_t* ctx) { // ctx->clear(ctx); } void ge_engine_run(ge_core_t *core) { GE_SAFE_CALL(core->callbacks.init, core); ge_init(core); core->state = GE_ENGINE_STATE_RUNNING; while (core->state == GE_ENGINE_STATE_RUNNING) { if (core->timer.fps_ctl.target_fps) ge_fps_begin_frame(&core->timer.fps_ctl); GE_SAFE_CALL(core->callbacks.run, core); if (core->render.content) ge_render(&core->render); if (core->timer.fps_ctl.target_fps) ge_fps_end_frame(&core->timer.fps_ctl); else core->timer.sleep_ms(1000 / core->configs.fps); } GE_SAFE_CALL(core->callbacks.exit, core); }