@ -43,6 +43,22 @@
# define _GLFW_JOYSTICK_BUTTON 2
# define _GLFW_JOYSTICK_HATBIT 3
// Initializes the platform joystick API if it has not been already
//
static GLFWbool initJoysticks ( void )
{
if ( ! _glfw . joysticksInitialized )
{
if ( ! _glfwPlatformInitJoysticks ( ) )
{
_glfwPlatformTerminateJoysticks ( ) ;
return GLFW_FALSE ;
}
}
return _glfw . joysticksInitialized = GLFW_TRUE ;
}
// Finds a mapping based on joystick GUID
//
static _GLFWmapping * findMapping ( const char * guid )
@ -929,6 +945,9 @@ GLFWAPI int glfwJoystickPresent(int jid)
return GLFW_FALSE ;
}
if ( ! initJoysticks ( ) )
return GLFW_FALSE ;
js = _glfw . joysticks + jid ;
if ( ! js - > present )
return GLFW_FALSE ;
@ -954,6 +973,9 @@ GLFWAPI const float* glfwGetJoystickAxes(int jid, int* count)
return NULL ;
}
if ( ! initJoysticks ( ) )
return GLFW_FALSE ;
js = _glfw . joysticks + jid ;
if ( ! js - > present )
return NULL ;
@ -983,6 +1005,9 @@ GLFWAPI const unsigned char* glfwGetJoystickButtons(int jid, int* count)
return NULL ;
}
if ( ! initJoysticks ( ) )
return GLFW_FALSE ;
js = _glfw . joysticks + jid ;
if ( ! js - > present )
return NULL ;
@ -1016,6 +1041,9 @@ GLFWAPI const unsigned char* glfwGetJoystickHats(int jid, int* count)
return NULL ;
}
if ( ! initJoysticks ( ) )
return GLFW_FALSE ;
js = _glfw . joysticks + jid ;
if ( ! js - > present )
return NULL ;
@ -1042,6 +1070,9 @@ GLFWAPI const char* glfwGetJoystickName(int jid)
return NULL ;
}
if ( ! initJoysticks ( ) )
return GLFW_FALSE ;
js = _glfw . joysticks + jid ;
if ( ! js - > present )
return NULL ;
@ -1067,6 +1098,9 @@ GLFWAPI const char* glfwGetJoystickGUID(int jid)
return NULL ;
}
if ( ! initJoysticks ( ) )
return NULL ;
js = _glfw . joysticks + jid ;
if ( ! js - > present )
return NULL ;
@ -1112,6 +1146,10 @@ GLFWAPI void* glfwGetJoystickUserPointer(int jid)
GLFWAPI GLFWjoystickfun glfwSetJoystickCallback ( GLFWjoystickfun cbfun )
{
_GLFW_REQUIRE_INIT_OR_RETURN ( NULL ) ;
if ( ! initJoysticks ( ) )
return NULL ;
_GLFW_SWAP_POINTERS ( _glfw . callbacks . joystick , cbfun ) ;
return cbfun ;
}
@ -1191,6 +1229,9 @@ GLFWAPI int glfwJoystickIsGamepad(int jid)
return GLFW_FALSE ;
}
if ( ! initJoysticks ( ) )
return GLFW_FALSE ;
js = _glfw . joysticks + jid ;
if ( ! js - > present )
return GLFW_FALSE ;
@ -1216,6 +1257,9 @@ GLFWAPI const char* glfwGetGamepadName(int jid)
return NULL ;
}
if ( ! initJoysticks ( ) )
return NULL ;
js = _glfw . joysticks + jid ;
if ( ! js - > present )
return NULL ;
@ -1248,6 +1292,9 @@ GLFWAPI int glfwGetGamepadState(int jid, GLFWgamepadstate* state)
return GLFW_FALSE ;
}
if ( ! initJoysticks ( ) )
return GLFW_FALSE ;
js = _glfw . joysticks + jid ;
if ( ! js - > present )
return GLFW_FALSE ;