Открыть сервис

XInput

XInput — это программный интерфейс (API), разработанный компанией Microsoft для взаимодействия операционной системы Windows с игровыми контроллерами, в первую очередь с геймпадами. Он был представлен в 2005 году вместе с выпуском игровой консоли Xbox 360 и операционной системы Windows Vista, а также доступен для Windows XP с установленным пакетом обновлений. XInput пришёл на смену более старому и менее универсальному API DirectInput, предложив упрощённую модель работы с контроллерами, стандартизированную под архитектуру геймпадов Xbox.

История

До появления XInput основным способом подключения игровых устройств в Windows был API DirectInput, входивший в состав DirectX. DirectInput поддерживал широкий спектр устройств: от джойстиков и рулей до геймпадов и клавиатур, но требовал от разработчиков написания кода для обработки различных конфигураций кнопок и осей. С выходом Xbox 360 компания Microsoft решила унифицировать опыт использования геймпадов на консолях и ПК. Для этого был создан XInput, который изначально ориентировался на стандартную раскладку контроллера Xbox 360: два аналоговых стика, крестовина, четыре лицевые кнопки (A, B, X, Y), два бампера, два триггера, кнопки Start, Back и Guide.

Первая версия XInput была включена в состав DirectX 9.0c для Windows Vista. В последующих версиях DirectX (10, 11, 12) API оставался обратно совместимым, но не претерпевал кардинальных изменений. С выходом Xbox One в 2013 году Microsoft обновила XInput для поддержки новых контроллеров, сохранив при этом полную обратную совместимость с геймпадами Xbox 360. В Windows 10 и Windows 11 XInput является стандартным API для работы с геймпадами, поддерживаемым на уровне драйверов и системы.

Архитектура и принцип работы

XInput предоставляет разработчикам набор функций для опроса состояния подключённых контроллеров. Основные компоненты API:

  • XInputGetState — функция, возвращающая текущее состояние контроллера: положение стиков, нажатие кнопок, положение триггеров, а также состояние вибрации.
  • XInputSetState — функция, позволяющая управлять вибрацией контроллера (два независимых мотора: низкочастотный и высокочастотный).
  • XInputGetCapabilities — функция, возвращающая информацию о возможностях контроллера (тип, поддерживаемые функции).
  • XInputEnable — функция, включающая или отключающая обработку ввода от контроллера.

API поддерживает до четырёх контроллеров, подключённых одновременно (индексы от 0 до 3). Каждый контроллер идентифицируется уникальным номером, и система гарантирует, что при отключении и повторном подключении устройства его индекс может измениться. XInput не поддерживает горячее переключение между контроллерами разных типов в рамках одного индекса — для этого требуется переподключение.

Отличия от DirectInput

Основное различие между XInput и DirectInput заключается в уровне абстракции и целевой аудитории. DirectInput был разработан для работы с любыми устройствами ввода, включая нестандартные, но требовал от разработчика ручной обработки осей и кнопок. XInput, напротив, жёстко привязан к стандартной раскладке контроллера Xbox. Это упрощает разработку, но ограничивает поддержку нестандартных устройств.

Ключевые отличия:

ПараметрXInputDirectInput
Поддержка устройствТолько контроллеры Xbox (и совместимые)Любые устройства ввода
Количество кнопокМаксимум 10 (включая стики)Неограниченно
Обработка триггеровКак отдельные оси (аналоговые)Как единая ось Z
ВибрацияВстроенная поддержкаТребуется ручная реализация
Поддержка геймпадов Xbox 360/OneПолнаяЧастичная (через эмуляцию)
Простота использованияВысокаяНизкая

Из-за этих различий многие современные игры, особенно выпущенные после 2010 года, используют исключительно XInput. DirectInput остаётся актуальным для симуляторов (авиа-, авто-) и специализированных устройств (рули, педали, джойстики).

Поддержка контроллеров

XInput изначально разработан для геймпадов Xbox 360 и Xbox One. Однако благодаря широкому распространению стандарта, многие сторонние производители выпускают контроллеры, совместимые с XInput. К таким устройствам относятся:

  • Геймпады от Logitech (серия F), Razer, Thrustmaster, PowerA и других.
  • Беспроводные адаптеры для контроллеров PlayStation, которые эмулируют XInput (например, адаптеры от Mayflash или Brook).
  • Программные эмуляторы, такие как x360ce (Xbox 360 Controller Emulator), позволяющие использовать контроллеры, не поддерживающие XInput, в играх, требующих этот API.

Операционная система Windows автоматически определяет контроллеры, поддерживающие XInput, и устанавливает для них стандартный драйвер. Для геймпадов Xbox 360 и Xbox One драйверы встроены в систему, начиная с Windows 7. Для сторонних устройств может потребоваться установка драйвера от производителя.

Использование в играх

XInput является стандартом де-факто для поддержки геймпадов в играх на ПК. Большинство современных игр, выпускаемых для Windows, используют XInput для обработки ввода с контроллера. Это касается как AAA-проектов, так и инди-игр. Игры, разработанные для консолей Xbox и портированные на ПК, почти всегда используют XInput, так как это обеспечивает идентичную логику работы с контроллером.

Разработчики могут использовать XInput напрямую через функции Win32 API или через обёртки, такие как SDL2, GLFW или XInput-обёртки в игровых движках (Unity, Unreal Engine). В последних версиях Windows (начиная с Windows 8) также появился API Windows.Gaming.Input, который является более современным и кроссплатформенным, но XInput остаётся наиболее распространённым благодаря обратной совместимости.

Критика и ограничения

Несмотря на широкое распространение, XInput имеет ряд недостатков:

  • Ограничение на количество контроллеров: API поддерживает только четыре устройства одновременно. Для игр с большим числом игроков (например, локальных мультиплеерных) это может быть проблемой.
  • Отсутствие поддержки нестандартных устройств: XInput не подходит для рулей, джойстиков, педалей и других специализированных контроллеров, что вынуждает разработчиков симуляторов использовать DirectInput.
  • Жёсткая привязка к раскладке: Игры, использующие XInput, ожидают, что у контроллера есть два аналоговых стика, крестовина и четыре лицевые кнопки. Устройства с другой конфигурацией (например, одностиковые геймпады) могут работать некорректно.
  • Отсутствие поддержки сложных функций: API не предоставляет доступа к гироскопам, акселерометрам, сенсорным панелям и другим дополнительным датчикам, которые есть в современных контроллерах (например, DualSense от PlayStation). Для их использования требуется отдельная реализация через другие API.

Альтернативы

Помимо XInput, существуют другие API для работы с контроллерами в Windows:

  • DirectInput — устаревший, но всё ещё используемый API для нестандартных устройств.
  • Windows.Gaming.Input — современный API от Microsoft, входящий в состав Universal Windows Platform (UWP). Поддерживает контроллеры Xbox, PlayStation, Nintendo Switch, а также геймпады с дополнительными функциями (гироскоп, вибрация). Однако он менее распространён в играх, выпущенных до 2018 года.
  • Raw Input — низкоуровневый API, позволяющий получать данные напрямую от устройства без обработки системой. Используется в профессиональных симуляторах и эмуляторах.
  • Steam Input — API от компании Valve, работающий через Steam. Позволяет переназначать кнопки, эмулировать мышь и клавиатуру, а также поддерживает практически любые контроллеры. Широко используется в играх, распространяемых через Steam.

Интересные факты

  • Название XInput происходит от «Xbox Input», что прямо указывает на его происхождение.
  • XInput не поддерживает работу с клавиатурой и мышью — это исключительно API для геймпадов.
  • В Windows XP поддержка XInput была добавлена только в Service Pack 2, а для более ранних версий требовалась установка DirectX 9.0c.
  • Многие игры, выпущенные до 2007 года, не поддерживают XInput, что вынуждает игроков использовать эмуляторы (например, x360ce) для подключения современных геймпадов.
  • В Windows 10 и 11 XInput работает в режиме совместимости с контроллерами Xbox 360, даже если используется геймпад Xbox One или Xbox Series X|S.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →