From 18b1e0286e6a2a23b05a1955f5fe99f61ebfa2a8 Mon Sep 17 00:00:00 2001 From: "John F. Fay" Date: Sun, 13 Dec 2009 13:47:20 +0000 Subject: [PATCH] Having the library poll joysticks only if there is an active joystick callback enabled per e-mail exchange titled "overjoyed" on December 10-13, 2009 git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@863 7f0cb862-5218-0410-a997-914c9d46530a --- src/freeglut_callbacks.c | 9 +++++++++ src/freeglut_init.c | 1 + src/freeglut_internal.h | 3 ++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/freeglut_callbacks.c b/src/freeglut_callbacks.c index 4915e19..4f6ad86 100644 --- a/src/freeglut_callbacks.c +++ b/src/freeglut_callbacks.c @@ -179,6 +179,15 @@ void FGAPIENTRY glutJoystickFunc( void (* callback) FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutJoystickFunc" ); fgInitialiseJoysticks (); + if ( ( ( fgStructure.CurrentWindow->State.JoystickPollRate < 0 ) || + !FETCH_WCB(*fgStructure.CurrentWindow,Joystick) ) && /* Joystick callback was disabled */ + ( callback && ( pollInterval >= 0 ) ) ) /* but is now enabled */ + ++fgState.NumActiveJoysticks; + else if ( ( ( fgStructure.CurrentWindow->State.JoystickPollRate >= 0 ) && + FETCH_WCB(*fgStructure.CurrentWindow,Joystick) ) && /* Joystick callback was enabled */ + ( !callback || ( pollInterval < 0 ) ) ) /* but is now disabled */ + --fgState.NumActiveJoysticks; + SET_CALLBACK( Joystick ); fgStructure.CurrentWindow->State.JoystickPollRate = pollInterval; diff --git a/src/freeglut_init.c b/src/freeglut_init.c index 5161c03..8b9d34d 100644 --- a/src/freeglut_init.c +++ b/src/freeglut_init.c @@ -84,6 +84,7 @@ SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */ GLUT_EXEC_STATE_INIT, /* ExecState */ NULL, /* ProgramName */ GL_FALSE, /* JoysticksInitialised */ + 0, /* NumActiveJoysticks */ GL_FALSE, /* InputDevsInitialised */ 1, /* AuxiliaryBufferNumber */ 4, /* SampleNumber */ diff --git a/src/freeglut_internal.h b/src/freeglut_internal.h index d8ae89f..79cb404 100644 --- a/src/freeglut_internal.h +++ b/src/freeglut_internal.h @@ -57,7 +57,7 @@ #else # error "Unrecognized target host!" -*/ + #endif #endif @@ -320,6 +320,7 @@ struct tagSFG_State fgExecutionState ExecState; /* Used for GLUT termination */ char *ProgramName; /* Name of the invoking program */ GLboolean JoysticksInitialised; /* Only initialize if application calls for them */ + int NumActiveJoysticks; /* Number of active joysticks -- if zero, don't poll joysticks */ GLboolean InputDevsInitialised; /* Only initialize if application calls for them */ int AuxiliaryBufferNumber; /* Number of auxiliary buffers */ -- 1.7.10.4