Skip to content
Permalink
Browse files

Merge pull request #7680 from jordan-woyak/dinput-axis-range

DirectInput: Use more than 8 bits of precision on axis inputs.
  • Loading branch information...
leoetlino committed Jan 16, 2019
2 parents 634ef78 + a7c45fb commit b2de98cad168dee08a5299bd1220d88a0a6c09eb
Showing with 7 additions and 6 deletions.
  1. +7 −6 Source/Core/InputCommon/ControllerInterface/DInput/DInputJoystick.cpp
@@ -3,6 +3,7 @@
// Refer to the license.txt file included.

#include <algorithm>
#include <limits>
#include <map>
#include <sstream>

@@ -121,13 +122,13 @@ Joystick::Joystick(/*const LPCDIDEVICEINSTANCE lpddi, */ const LPDIRECTINPUTDEVI
for (unsigned int offset = 0; offset < DIJOFS_BUTTON(0) / sizeof(LONG); ++offset)
{
range.diph.dwObj = offset * sizeof(LONG);
// try to set some nice power of 2 values (128) to match the GameCube controls
range.lMin = -(1 << 7);
range.lMax = (1 << 7);
// Try to set a range with 16 bits of precision:
range.lMin = std::numeric_limits<s16>::min();
range.lMax = std::numeric_limits<s16>::max();
m_device->SetProperty(DIPROP_RANGE, &range.diph);
// but I guess not all devices support setting range
// so I getproperty right afterward incase it didn't set.
// This also checks that the axis is present
// Not all devices support setting DIPROP_RANGE so we must GetProperty right back.
// This also checks that the axis is present.
// Note: Even though not all devices support setting DIPROP_RANGE, some require it.
if (SUCCEEDED(m_device->GetProperty(DIPROP_RANGE, &range.diph)))
{
const LONG base = (range.lMin + range.lMax) / 2;

0 comments on commit b2de98c

Please sign in to comment.
You can’t perform that action at this time.