fixed synchronization problem when configuring game controller
authorHolger Schemel <info@artsoft.org>
Wed, 22 Jun 2022 13:17:19 +0000 (15:17 +0200)
committerHolger Schemel <info@artsoft.org>
Wed, 22 Jun 2022 13:17:19 +0000 (15:17 +0200)
This fixes a bug that can happen due to bad initialization of a delay
counter (to limit the maximum time spent on handling events), causing
it to reach the maximum delay while the screen refresh is also waiting
for the video delay. Resetting the counter right after screen update
fixes this potential problem.

src/screens.c

index b45e99119d3e7c5e163fd23cfff625fd5807db70..533cf4c4ce2cb84338297ff56d9de7ec122911a5 100644 (file)
@@ -8630,11 +8630,6 @@ static boolean ConfigureJoystickMapButtonsAndAxes(SDL_Joystick *joystick)
     { 282, 210, MARKER_AXIS_Y, "righty",       },
   };
 
-  unsigned int event_frame_delay = 0;
-  unsigned int event_frame_delay_value = GAME_FRAME_DELAY;
-
-  ResetDelayCounter(&event_frame_delay);
-
   if (!bitmaps_initialized)
   {
     controller = LoadCustomImage("joystick/controller.png");
@@ -8766,6 +8761,12 @@ static boolean ConfigureJoystickMapButtonsAndAxes(SDL_Joystick *joystick)
 
       screen_initialized = TRUE;
 
+      unsigned int event_frame_delay = 0;
+      unsigned int event_frame_delay_value = GAME_FRAME_DELAY;
+
+      // reset frame delay counter directly after updating screen
+      ResetDelayCounter(&event_frame_delay);
+
       while (NextValidEvent(&event))
       {
        switch (event.type)