1
0
Fork 0
mirror of https://github.com/gwm17/glfw.git synced 2025-02-06 22:28:51 -05:00

Only poll requested joystick on OS X

This commit is contained in:
Camilla Berglund 2015-12-13 15:14:14 +01:00
parent 45efb935c5
commit 12871db0f9

View File

@ -193,18 +193,13 @@ static void removeJoystick(_GLFWjoydeviceNS* joystick)
// Polls for joystick events and updates GLFW state
//
static void pollJoystickEvents(void)
{
int joy;
for (joy = 0; joy <= GLFW_JOYSTICK_LAST; joy++)
static GLFWbool pollJoystickEvents(_GLFWjoydeviceNS* joystick)
{
CFIndex i;
int buttonIndex = 0;
_GLFWjoydeviceNS* joystick = _glfw.ns_js.devices + joy;
if (!joystick->present)
continue;
return GLFW_FALSE;
for (i = 0; i < CFArrayGetCount(joystick->buttonElements); i++)
{
@ -251,7 +246,8 @@ static void pollJoystickEvents(void)
joystick->buttons[buttonIndex++] = GLFW_RELEASE;
}
}
}
return GLFW_TRUE;
}
// Callback for user-initiated joystick addition
@ -466,18 +462,14 @@ void _glfwTerminateJoysticksNS(void)
int _glfwPlatformJoystickPresent(int joy)
{
pollJoystickEvents();
return _glfw.ns_js.devices[joy].present;
_GLFWjoydeviceNS* joystick = _glfw.ns_js.devices + joy;
return pollJoystickEvents(joystick);
}
const float* _glfwPlatformGetJoystickAxes(int joy, int* count)
{
_GLFWjoydeviceNS* joystick = _glfw.ns_js.devices + joy;
pollJoystickEvents();
if (!joystick->present)
if (!pollJoystickEvents(joystick))
return NULL;
*count = (int) CFArrayGetCount(joystick->axisElements);
@ -487,10 +479,7 @@ const float* _glfwPlatformGetJoystickAxes(int joy, int* count)
const unsigned char* _glfwPlatformGetJoystickButtons(int joy, int* count)
{
_GLFWjoydeviceNS* joystick = _glfw.ns_js.devices + joy;
pollJoystickEvents();
if (!joystick->present)
if (!pollJoystickEvents(joystick))
return NULL;
*count = (int) CFArrayGetCount(joystick->buttonElements) +
@ -500,8 +489,10 @@ const unsigned char* _glfwPlatformGetJoystickButtons(int joy, int* count)
const char* _glfwPlatformGetJoystickName(int joy)
{
pollJoystickEvents();
_GLFWjoydeviceNS* joystick = _glfw.ns_js.devices + joy;
if (!pollJoystickEvents(joystick))
return NULL;
return _glfw.ns_js.devices[joy].name;
return joystick->name;
}