From 6b1a88d3a4a0e5b8fc6d92928ebbb3586aa107fc Mon Sep 17 00:00:00 2001 From: Emmet Young Date: Sun, 22 Feb 2015 21:11:20 +1100 Subject: [PATCH] Change to how NRage is dynamically linking XInput, rather than loading it every time functions such as GetXInputControllerKeys is called. Do it on initiate of controllers. Still not the best way to handle it. Need to rethink the way NRage handles the different API's rather than just tacking it on the side --- Source/nragev20/XInputController.cpp | 39 ++++++---------------------- Source/nragev20/XInputController.h | 3 +++ 2 files changed, 11 insertions(+), 31 deletions(-) diff --git a/Source/nragev20/XInputController.cpp b/Source/nragev20/XInputController.cpp index b093a7f08..2f91eedf9 100644 --- a/Source/nragev20/XInputController.cpp +++ b/Source/nragev20/XInputController.cpp @@ -155,17 +155,6 @@ void AxisDeadzone( SHORT &AxisValue, long lDeadZoneValue, float fDeadZoneRelati void GetXInputControllerKeys( const int indexController, LPDWORD Keys ) { - HMODULE hInput = LoadLibrary("Xinput1_4.dll"); - if (hInput == NULL) - { - hInput = LoadLibrary("Xinput9_1_0.dll"); - } - if (hInput == NULL) - { - return; - } - - DWORD(WINAPI * fnXInputGetState) (DWORD dwUserIndex, XINPUT_STATE* pState) = NULL; if (fnXInputGetState == NULL) { return; @@ -302,6 +291,11 @@ void DefaultXInputControllerKeys( LPXCONTROLLER gController) void VibrateXInputController( DWORD nController, int LeftMotorVal, int RightMotorVal ) { + if (fnXInputSetState == NULL) + { + return; + } + XINPUT_VIBRATION vibration; ZeroMemory( &vibration, sizeof( XINPUT_VIBRATION ) ); @@ -309,23 +303,6 @@ void VibrateXInputController( DWORD nController, int LeftMotorVal, int RightMoto vibration.wLeftMotorSpeed = LeftMotorVal; vibration.wRightMotorSpeed = RightMotorVal; - HMODULE hInput = LoadLibrary("Xinput1_4.dll"); - if (hInput == NULL) - { - hInput = LoadLibrary("Xinput9_1_0.dll"); - } - if (hInput == NULL) - { - return; - } - - DWORD (WINAPI * fnXInputSetState) ( DWORD dwUserIndex, XINPUT_VIBRATION* pVibration ) = NULL; - fnXInputSetState = (DWORD(WINAPI *) (DWORD, XINPUT_VIBRATION*))GetProcAddress(hInput, "XInputSetState"); - if (fnXInputSetState == NULL) - { - return; - } - fnXInputSetState(nController, &vibration); } @@ -340,10 +317,10 @@ bool InitiateXInputController( LPXCONTROLLER gController, int nControl ) { return false; } - - DWORD(WINAPI * fnXInputGetState) (DWORD dwUserIndex, XINPUT_STATE* pState) = NULL; + + fnXInputSetState = (DWORD(WINAPI *) (DWORD, XINPUT_VIBRATION*))GetProcAddress(hInput, "XInputSetState"); fnXInputGetState = (DWORD(WINAPI *) (DWORD, XINPUT_STATE*))GetProcAddress(hInput, "XInputGetState"); - if (fnXInputGetState == NULL) + if (fnXInputGetState == NULL || fnXInputSetState == NULL) { return false; } diff --git a/Source/nragev20/XInputController.h b/Source/nragev20/XInputController.h index 83bd35aff..6706ddb4c 100644 --- a/Source/nragev20/XInputController.h +++ b/Source/nragev20/XInputController.h @@ -114,6 +114,9 @@ void VibrateXInputController( DWORD nController, int LeftMotorVal = 65535, int R // Initialize nControl XInput enabled controller bool InitiateXInputController( LPXCONTROLLER gController, int nControl ); +static DWORD(WINAPI * fnXInputGetState) (DWORD dwUserIndex, XINPUT_STATE* pState) = NULL; +static DWORD(WINAPI * fnXInputSetState) (DWORD dwUserIndex, XINPUT_VIBRATION* pVibration) = NULL; + // XController dialog #define XC_DPAD 1