XInput и DirectInput: какой режим геймпада выбрать
Если игра «не видит» геймпад, триггеры работают странно или появляется второй контроллер — почти всегда дело в том, что устройство/программа работает в XInput или DirectInput и Windows подключает разные драйверы и способы опроса. Для большинства современных игр выбирайте XInput, а DirectInput оставляйте для старых игр и нестандартных устройств.
Оглавление
Что такое XInput и DirectInput
XInput — «режим Xbox». Его ждут большинство современных игр на ПК: понятные подсказки A/B/X/Y, корректная вибрация, и главное — LT/RT читаются раздельно, как и задумано.
DirectInput — более старый и универсальный способ ввода (часто для «generic USB gamepad», рулей, джойстиков и старых игр). Он может работать отлично, но в играх, ориентированных на XInput, проявляются ограничения.
Коротко по отличиям
| Критерий | XInput | DirectInput |
|---|---|---|
| Современные игры | Обычно «завёлся и играешь» | Может требовать ручных настроек |
| Триггеры LT/RT | Раздельные оси | Могут «слипаться» в одну ось/работать нестандартно |
| Вибрация | Обычно работает стабильно | Может не работать или работать частично |
| Старые игры | Иногда не распознают | Часто совместимее |
Режимы совместимости: переключатель, эмуляция, Steam Input
1) Аппаратный переключатель X/D (если есть)
Самый надёжный вариант: геймпад сам меняет режим.
- Для новых игр — X (XInput).
- Для старых — D (DirectInput).
2) Эмуляция DirectInput → XInput (виртуальный Xbox-контроллер)
Когда игра принимает только XInput, а у вас DirectInput-геймпад, используют прослойку, создающую виртуальный XInput-контроллер (через виртуальный драйвер). Это решает совместимость, но добавляет риск конфликтов.
Главная ловушка эмуляции — double input (двойной ввод): игра видит и физический геймпад (HID/DirectInput), и виртуальный (XInput). Симптомы: двойные нажатия, «сам пролистывает меню», два устройства в настройках.
Как лечится обычно (по порядку):
- Не накладывайте эмуляцию поверх уже работающего XInput (если есть переключатель — перейдите в XInput без софта).
- В программе-эмуляторе включите опцию скрыть физический контроллер (hide device / hide controller).
- Отключите лишние слои ввода: например, чтобы одновременно не работали и эмулятор, и принудительная обработка через Steam Input.
3) Steam Input
Steam Input часто выступает «переводчиком» и помогает, когда игра капризная. Полезно, но тоже может стать вторым слоем и вызвать конфликт подсказок/ввода, если игра имеет нативную поддержку вашего геймпада.
Драйверы Windows и типовые симптомы
Понимание драйверов помогает быстрее искать причину:
-
DirectInput чаще опирается на HID-стек Windows (устройство определяется как USB/HID game controller).
Симптомы: «generic» в игре, странные оси, иногда нет вибрации. -
XInput использует Xbox-стек (XUSB-драйверы).
Симптомы: корректные подсказки Xbox, стабильная вибрация, триггеры раздельные. -
Виртуальный контроллер появляется как отдельное устройство, когда включена эмуляция.
Симптомы: второй геймпад в системе/игре, двойной ввод.
Как быстро проверить текущий режим
Win + R→joy.cpl→ откройте свойства и посмотрите, как ведут себя оси/триггеры.- Диспетчер устройств: если преобладают записи про HID — чаще DirectInput; если видно Xbox-периферию/контроллер — чаще XInput.
Частые ошибки
- Включили эмуляцию XInput, хотя геймпад уже в XInput. Итог — второй контроллер и double input.
- Пытаетесь настроить раздельные триггеры в DirectInput-игре, где они «слиплись». Решение — перейти в XInput или использовать перевод в XInput.
- Оставили включёнными несколько обработчиков (эмулятор + Steam Input + внутриигровая поддержка). Итог — конфликт подсказок и нестабильный ввод.
FAQ
Что выбрать для «просто играть без настроек»?
Почти всегда XInput.
Почему триггеры в DirectInput ведут себя как одна ось?
Это типичное поведение режима совместимости: старые игры ожидали «центр» оси в покое, поэтому триггеры могли быть сведены в одну ось.
Можно ли полностью избежать двойного ввода при эмуляции?
Да: используйте только один слой (либо Steam Input, либо отдельный эмулятор) и включайте в нём режим скрытия физического контроллера, чтобы игра видела только виртуальный XInput.