Timer optimizations.
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@371 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
5b391a7097
commit
e6de6c2e6f
@ -95,19 +95,32 @@ void FGAPIENTRY glutIdleFunc( void (* callback)( void ) )
|
||||
void FGAPIENTRY glutTimerFunc( unsigned int timeOut, void (* callback)( int ),
|
||||
int timerID )
|
||||
{
|
||||
SFG_Timer* timer;
|
||||
SFG_Timer *timer, *node;
|
||||
|
||||
freeglut_assert_ready;
|
||||
|
||||
timer = (SFG_Timer *)calloc( sizeof(SFG_Timer), 1 );
|
||||
if( !timer )
|
||||
if( (timer = fgState.FreeTimers.Last) )
|
||||
{
|
||||
fgListRemove( &fgState.FreeTimers, &timer->Node );
|
||||
}
|
||||
else
|
||||
{
|
||||
if( ! (timer = malloc(sizeof(SFG_Timer))) )
|
||||
fgError( "Fatal error: "
|
||||
"Memory allocation failure in glutTimerFunc()\n" );
|
||||
}
|
||||
|
||||
timer->Callback = callback;
|
||||
timer->ID = timerID;
|
||||
timer->TriggerTime = fgElapsedTime() + timeOut;
|
||||
fgListAppend( &fgState.Timers, &timer->Node );
|
||||
|
||||
for( node = fgState.Timers.First; node; node = node->Node.Next )
|
||||
{
|
||||
if( node->TriggerTime > timer->TriggerTime )
|
||||
break;
|
||||
}
|
||||
|
||||
fgListInsert( &fgState.Timers, &node->Node, &timer->Node );
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user