git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1613
7f0cb862-5218-0410-a997-
914c9d46530a
timer->ID = timerID;
timer->TriggerTime = fgElapsedTime() + timeOut;
timer->ID = timerID;
timer->TriggerTime = fgElapsedTime() + timeOut;
+ /* Insert such that timers are sorted by end-time */
for( node = fgState.Timers.First; node; node = node->Node.Next )
{
if( node->TriggerTime > timer->TriggerTime )
for( node = fgState.Timers.First; node; node = node->Node.Next )
{
if( node->TriggerTime > timer->TriggerTime )
SFG_Timer *timer = fgState.Timers.First;
if( timer->TriggerTime > checkTime )
SFG_Timer *timer = fgState.Timers.First;
if( timer->TriggerTime > checkTime )
- /* XXX: are timers always sorted by triggerTime? If not, this and fghNextTimer are wrong */
+ /* Timers are sorted by triggerTime */
break;
fgListRemove( &fgState.Timers, &timer->Node );
break;
fgListRemove( &fgState.Timers, &timer->Node );
*/
static fg_time_t fghNextTimer( void )
{
*/
static fg_time_t fghNextTimer( void )
{
- fg_time_t currentTime = fgElapsedTime();
- SFG_Timer *timer = fgState.Timers.First;
+ fg_time_t currentTime;
+ SFG_Timer *timer = fgState.Timers.First; /* timers are sorted by trigger time, so only have to check the first */
if( !timer )
return INT_MAX;
if( !timer )
return INT_MAX;
+ currentTime = fgElapsedTime();
if( timer->TriggerTime < currentTime )
return 0;
else
if( timer->TriggerTime < currentTime )
return 0;
else