From 5de8190e37f2560de38776063b1cc946eea95656 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Tue, 22 Oct 2019 02:59:52 +0700 Subject: [PATCH] add new frame_finalize stage to game loop --- headers/enduro2d/core/engine.hpp | 1 + headers/enduro2d/high/systems/_systems.hpp | 2 ++ sources/enduro2d/core/engine.cpp | 4 ++++ sources/enduro2d/high/starter.cpp | 13 ++++++++++--- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/headers/enduro2d/core/engine.hpp b/headers/enduro2d/core/engine.hpp index d2f695e7..dcc070db 100644 --- a/headers/enduro2d/core/engine.hpp +++ b/headers/enduro2d/core/engine.hpp @@ -53,6 +53,7 @@ namespace e2d virtual void shutdown() noexcept; virtual bool frame_tick(); virtual void frame_render(); + virtual void frame_finalize(); }; // diff --git a/headers/enduro2d/high/systems/_systems.hpp b/headers/enduro2d/high/systems/_systems.hpp index 4be97855..bb4966bd 100644 --- a/headers/enduro2d/high/systems/_systems.hpp +++ b/headers/enduro2d/high/systems/_systems.hpp @@ -29,6 +29,8 @@ namespace e2d::systems struct pre_render_event {}; struct post_render_event {}; + struct frame_finalize_event {}; + using update_system = ecs::system; using post_update_system = ecs::system; diff --git a/sources/enduro2d/core/engine.cpp b/sources/enduro2d/core/engine.cpp index 97caef25..9efef894 100644 --- a/sources/enduro2d/core/engine.cpp +++ b/sources/enduro2d/core/engine.cpp @@ -60,6 +60,9 @@ namespace e2d void engine::application::frame_render() { } + void engine::application::frame_finalize() { + } + // // engine::debug_parameters // @@ -501,6 +504,7 @@ namespace e2d the().swap_buffers(); } + app->frame_finalize(); state_->calculate_end_frame_timers(); } catch ( ... ) { app->shutdown(); diff --git a/sources/enduro2d/high/starter.cpp b/sources/enduro2d/high/starter.cpp index 9347c2b9..31b70f2f 100644 --- a/sources/enduro2d/high/starter.cpp +++ b/sources/enduro2d/high/starter.cpp @@ -51,10 +51,10 @@ namespace .add_system()) .feature(ecs::feature() .add_system()) - .feature(ecs::feature() - .add_system()) .feature(ecs::feature() - .add_system()); + .add_system()) + .feature(ecs::feature() + .add_system()); return !application_ || application_->initialize(); } @@ -84,6 +84,13 @@ namespace registry.process_event(systems::render_event{}); registry.process_event(systems::post_render_event{}); } + + void frame_finalize() final { + world& w = the(); + ecs::registry& registry = w.registry(); + registry.process_event(systems::frame_finalize_event{}); + w.finalize_instances(); + } private: starter::application_uptr application_; };