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 ),
|
void FGAPIENTRY glutTimerFunc( unsigned int timeOut, void (* callback)( int ),
|
||||||
int timerID )
|
int timerID )
|
||||||
{
|
{
|
||||||
SFG_Timer* timer;
|
SFG_Timer *timer, *node;
|
||||||
|
|
||||||
freeglut_assert_ready;
|
freeglut_assert_ready;
|
||||||
|
|
||||||
timer = (SFG_Timer *)calloc( sizeof(SFG_Timer), 1 );
|
if( (timer = fgState.FreeTimers.Last) )
|
||||||
if( !timer )
|
{
|
||||||
fgError( "Fatal error: "
|
fgListRemove( &fgState.FreeTimers, &timer->Node );
|
||||||
"Memory allocation failure in glutTimerFunc()\n" );
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( ! (timer = malloc(sizeof(SFG_Timer))) )
|
||||||
|
fgError( "Fatal error: "
|
||||||
|
"Memory allocation failure in glutTimerFunc()\n" );
|
||||||
|
}
|
||||||
|
|
||||||
timer->Callback = callback;
|
timer->Callback = callback;
|
||||||
timer->ID = timerID;
|
timer->ID = timerID;
|
||||||
timer->TriggerTime = fgElapsedTime() + timeOut;
|
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