XInput и DirectInput: какой режим геймпада выбрать

Если игра «не видит» геймпад, триггеры работают странно или появляется второй контроллер — почти всегда дело в том, что устройство/программа работает в XInput или DirectInput и Windows подключает разные драйверы и способы опроса. Для большинства современных игр выбирайте XInput, а DirectInput оставляйте для старых игр и нестандартных устройств.

Оглавление

Что такое XInput и DirectInput

XInput — «режим Xbox». Его ждут большинство современных игр на ПК: понятные подсказки A/B/X/Y, корректная вибрация, и главное — LT/RT читаются раздельно, как и задумано.

DirectInput — более старый и универсальный способ ввода (часто для «generic USB gamepad», рулей, джойстиков и старых игр). Он может работать отлично, но в играх, ориентированных на XInput, проявляются ограничения.

Коротко по отличиям

КритерийXInputDirectInput
Современные игрыОбычно «завёлся и играешь»Может требовать ручных настроек
Триггеры LT/RTРаздельные осиМогут «слипаться» в одну ось/работать нестандартно
ВибрацияОбычно работает стабильноМожет не работать или работать частично
Старые игрыИногда не распознаютЧасто совместимее

Режимы совместимости: переключатель, эмуляция, Steam Input

1) Аппаратный переключатель X/D (если есть)

Самый надёжный вариант: геймпад сам меняет режим.

  • Для новых игр — X (XInput).
  • Для старых — D (DirectInput).

2) Эмуляция DirectInput → XInput (виртуальный Xbox-контроллер)

Когда игра принимает только XInput, а у вас DirectInput-геймпад, используют прослойку, создающую виртуальный XInput-контроллер (через виртуальный драйвер). Это решает совместимость, но добавляет риск конфликтов.

Главная ловушка эмуляции — double input (двойной ввод): игра видит и физический геймпад (HID/DirectInput), и виртуальный (XInput). Симптомы: двойные нажатия, «сам пролистывает меню», два устройства в настройках.

Как лечится обычно (по порядку):

  1. Не накладывайте эмуляцию поверх уже работающего XInput (если есть переключатель — перейдите в XInput без софта).
  2. В программе-эмуляторе включите опцию скрыть физический контроллер (hide device / hide controller).
  3. Отключите лишние слои ввода: например, чтобы одновременно не работали и эмулятор, и принудительная обработка через Steam Input.

3) Steam Input

Steam Input часто выступает «переводчиком» и помогает, когда игра капризная. Полезно, но тоже может стать вторым слоем и вызвать конфликт подсказок/ввода, если игра имеет нативную поддержку вашего геймпада.

Драйверы Windows и типовые симптомы

Понимание драйверов помогает быстрее искать причину:

  • DirectInput чаще опирается на HID-стек Windows (устройство определяется как USB/HID game controller).
    Симптомы: «generic» в игре, странные оси, иногда нет вибрации.

  • XInput использует Xbox-стек (XUSB-драйверы).
    Симптомы: корректные подсказки Xbox, стабильная вибрация, триггеры раздельные.

  • Виртуальный контроллер появляется как отдельное устройство, когда включена эмуляция.
    Симптомы: второй геймпад в системе/игре, двойной ввод.

Как быстро проверить текущий режим

  • Win + Rjoy.cpl → откройте свойства и посмотрите, как ведут себя оси/триггеры.
  • Диспетчер устройств: если преобладают записи про HID — чаще DirectInput; если видно Xbox-периферию/контроллер — чаще XInput.

Частые ошибки

  • Включили эмуляцию XInput, хотя геймпад уже в XInput. Итог — второй контроллер и double input.
  • Пытаетесь настроить раздельные триггеры в DirectInput-игре, где они «слиплись». Решение — перейти в XInput или использовать перевод в XInput.
  • Оставили включёнными несколько обработчиков (эмулятор + Steam Input + внутриигровая поддержка). Итог — конфликт подсказок и нестабильный ввод.

FAQ

Что выбрать для «просто играть без настроек»?
Почти всегда XInput.

Почему триггеры в DirectInput ведут себя как одна ось?
Это типичное поведение режима совместимости: старые игры ожидали «центр» оси в покое, поэтому триггеры могли быть сведены в одну ось.

Можно ли полностью избежать двойного ввода при эмуляции?
Да: используйте только один слой (либо Steam Input, либо отдельный эмулятор) и включайте в нём режим скрытия физического контроллера, чтобы игра видела только виртуальный XInput.