DirectInput8 instead of XInput

Started by
4 comments, last by 21st Century Moose 9 years, 11 months ago
Given that Xinput only accepts Xbox controllers(according to Microsoft), I am left with DirectInput8 to accept any type of generic joypad, or is there an alternative?
Intel Core 2 Quad CPU Q6600, 2.4 GHz. 3GB RAM. ATI Radeon HD 3400.
Advertisement

There's also Raw Input and Windows has a joystick API. I believe that only DirectInput will give you effects such as force-feedback, but someone with more knowledge about this than me would have to provide further info.

Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls.

IMHO DirectInput still is the right way how to work with almost any game controller. But you still should first try to find XInput devices, because DirectInput has one small problem with the Xbox gamepad - it represents the two analog buttons (triggers) as a single analog axis and thus there's no difference between both buttons on 0 and both buttons fully held down.

Btw, there are many Xbox compatible controllers, I have one made by Logitech. So it doesn't have to be just the original controller for Xbox.

DirectInput could be used for "legacy" gamepad, joystick, wheels, other game devices with force feedback, mouse and keyboard, whatever works with a HID driver..

For mouse and Keyboard imo is better to use the windows messages (and optionally raw input), however for most games DirectInput is just fine for mouse and keyboard too.

Xinput unfortunately support only xbox 360 controllers-like.

Starting from Windows 8 Microsoft added some new input API (sorta high-level win32 wrapper) for metro and desktop too, but they don't work on prior windows versions...

"Recursion is the first step towards madness." - "Skegg?ld, Skálm?ld, Skildir ro Klofnir!"
Direct3D 12 quick reference: https://github.com/alessiot89/D3D12QuickRef/

DirectInput can be used for mouse and keyboard, yep, but Microsoft itself doesn't recommend it.

So:

Mouse & keyboard - windows messages (or raw input, if you really want it).

Xbox compatible gamepads - Xinput (DirectInput works too, but with some limitations, so I don't recommend it).

All other game controllers - DirectInput.

The problems with windows messages for mouse input are: (1) ballistics (you don't always want them and Microsoft's recommendation just blindly assumes that you do), (2) clipping the mouse pointer to the window rect, and (3) showing/hiding the cursor as appropriate. These are all solvable, of course, but it would be nice to not have to worry about solving them. Raw input solves (1) but not (2) and (3). And as for the recommendation to run raw input in a hidden window on another thread which you periodically poll for status? Put it all together and congragulations, you've just re-invented DirectInput. So why would you re-invent DirectInput when DirectInput already exists?

The problem with DirectInput of course is that it's no longer updated, but if it otherwise meets your needs I don't see any issues with using it.

Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls.

This topic is closed to new replies.

Advertisement