diff --git a/tetris/functions.cpp b/tetris/functions.cpp index 274a7fe..3b55a46 100644 --- a/tetris/functions.cpp +++ b/tetris/functions.cpp @@ -118,6 +118,8 @@ void quitGame() { } void resetGame() { + std::lock_guard< std::mutex > guard( g_render_mutex ); + std::lock_guard< std::mutex > guard2( g_movement_mutex ); g_cur_object.reset(); g_checked_line = true; g_next_object.reset(); diff --git a/tetris/global_vars.cpp b/tetris/global_vars.cpp index d92065a..2e79c21 100644 --- a/tetris/global_vars.cpp +++ b/tetris/global_vars.cpp @@ -36,6 +36,7 @@ std::shared_ptr< TetrisPiece > g_cur_shadow{}; std::shared_ptr< SDLPP::RectangleRender > g_shadow_colider{}; std::mutex g_movement_mutex{}; +std::mutex g_render_mutex{}; bool g_quit = false; std::vector< std::function< void( diff --git a/tetris/global_vars.hpp b/tetris/global_vars.hpp index 7b3af25..8568584 100644 --- a/tetris/global_vars.hpp +++ b/tetris/global_vars.hpp @@ -42,6 +42,7 @@ extern std::shared_ptr< TetrisPiece > g_cur_shadow; extern std::shared_ptr< SDLPP::RectangleRender > g_shadow_colider; extern std::mutex g_movement_mutex; +extern std::mutex g_render_mutex; extern bool g_quit; extern std::vector< std::function< void( diff --git a/tetris/tetris.cpp b/tetris/tetris.cpp index 8222d53..a875a93 100644 --- a/tetris/tetris.cpp +++ b/tetris/tetris.cpp @@ -157,12 +157,15 @@ int main() { g_update_objects.pop_back(); } - renderer->clearRenderer(); - for ( size_t i = 0; i < g_active_scenes.size(); i++ ) { - g_active_scenes[i]->updateScene(); - g_active_scenes[i]->renderScene( false ); + { + std::lock_guard< std::mutex > guard( g_render_mutex ); + renderer->clearRenderer(); + for ( size_t i = 0; i < g_active_scenes.size(); i++ ) { + g_active_scenes[i]->updateScene(); + g_active_scenes[i]->renderScene( false ); + } + renderer->presentRenderer(); } - renderer->presentRenderer(); g_wait_for_anim = false; frames++; if ( SDL_GetTicks() - base >= 1000 ) {