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. Это упрощает разработку, но ограничивает поддержку нестандартных устройств.
Ключевые отличия:
| Параметр | XInput | DirectInput |
|---|---|---|
| Поддержка устройств | Только контроллеры 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 →


