diff --git a/librecomp/src/recomp.cpp b/librecomp/src/recomp.cpp index 9cdcce6..640e285 100644 --- a/librecomp/src/recomp.cpp +++ b/librecomp/src/recomp.cpp @@ -502,6 +502,7 @@ bool ultramodern::is_game_started() { } std::atomic_bool exited = false; +moodycamel::LightweightSemaphore graphics_shutdown_ready; void ultramodern::quit() { exited.store(true); @@ -763,6 +764,8 @@ void recomp::start( } } + graphics_shutdown_ready.signal(); + game_thread.join(); ultramodern::join_event_threads(); ultramodern::join_thread_cleaner_thread(); diff --git a/ultramodern/src/events.cpp b/ultramodern/src/events.cpp index 879d536..fed835d 100644 --- a/ultramodern/src/events.cpp +++ b/ultramodern/src/events.cpp @@ -105,6 +105,7 @@ uint64_t total_vis = 0; extern std::atomic_bool exited; +extern moodycamel::LightweightSemaphore graphics_shutdown_ready; void set_dummy_vi(); @@ -318,6 +319,7 @@ void gfx_thread_func(uint8_t* rdram, moodycamel::LightweightSemaphore* thread_re } } + graphics_shutdown_ready.wait(); renderer_context->shutdown(); }