diff --git a/libs/app/source/app.cpp b/libs/app/source/app.cpp index 3697a786..bf5c5476 100644 --- a/libs/app/source/app.cpp +++ b/libs/app/source/app.cpp @@ -25,6 +25,7 @@ namespace psemek::app bool running = false; bool had_initial_resize = false; + bool had_scene_exit = false; clock::time_point start_time; @@ -246,14 +247,23 @@ namespace psemek::app SDL_GL_SwapWindow(impl().window); } - impl().get_scene()->on_scene_exit(); + if (!impl().had_scene_exit) + { + impl().had_scene_exit = true; + impl().get_scene()->on_scene_exit(); + } } void app::push_scene(std::shared_ptr s) { - impl().get_scene()->on_scene_exit(); + if (!impl().had_scene_exit) + { + impl().had_scene_exit = true; + impl().get_scene()->on_scene_exit(); + } impl().had_initial_resize = false; + impl().had_scene_exit = false; impl().scene_stack.push_back(std::move(s)); impl().get_scene()->on_scene_enter(this); @@ -264,7 +274,11 @@ namespace psemek::app if (impl().scene_stack.empty()) return nullptr; - impl().get_scene()->on_scene_exit(); + if (!impl().had_scene_exit) + { + impl().had_scene_exit = true; + impl().get_scene()->on_scene_exit(); + } impl().had_initial_resize = false; auto s = std::move(impl().scene_stack.back());