Fixed bug identified by Kevin. If pollrate is larger than elapsedtime, we'd wrap...
authorDiederick Niehorster <dcnieho@gmail.com>
Sun, 12 Oct 2014 06:21:32 +0000 (06:21 +0000)
committerDiederick Niehorster <dcnieho@gmail.com>
Sun, 12 Oct 2014 06:21:32 +0000 (06:21 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1710 7f0cb862-5218-0410-a997-914c9d46530a

src/fg_callbacks.c

index 5ca3761..7d5fca6 100644 (file)
@@ -247,11 +247,12 @@ void FGAPIENTRY glutJoystickFunc( FGCBJoystick callback, int pollInterval )
     SET_CALLBACK( Joystick );
     fgStructure.CurrentWindow->State.JoystickPollRate = pollInterval;
 
-    fgStructure.CurrentWindow->State.JoystickLastPoll =
-        fgElapsedTime() - fgStructure.CurrentWindow->State.JoystickPollRate;
-
-    if( fgStructure.CurrentWindow->State.JoystickLastPoll < 0 )
+    /* set last poll time such that joystick will be polled asap */
+    fgStructure.CurrentWindow->State.JoystickLastPoll = fgElapsedTime();
+    if (fgStructure.CurrentWindow->State.JoystickLastPoll < pollInterval)
         fgStructure.CurrentWindow->State.JoystickLastPoll = 0;
+    else
+        fgStructure.CurrentWindow->State.JoystickLastPoll -= pollInterval;
 }