В вычислениях DirectInput является устаревшим Microsoft API для сбора данных от пользователя компьютера через устройства ввода, такие как мышь, клавиатура или геймпад. Он также предоставляет систему сопоставления действий, которая позволяет пользователю назначать определенные действия в игре кнопкам и осям устройств ввода. Кроме того, он обрабатывает устройства тактильной обратной связи (ввод / вывод). Microsoft представила новую библиотеку ввода под названием XInput специально для контроллера Xbox 360.
DirectInput и XInput обеспечивают преимущества по сравнению с обычными событиями ввода Win32:
Хотя DirectInput является частью библиотеки DirectX, со времени DirectX 8 (2001–2002 гг.) он не подвергался значительным изменениям. Microsoft рекомендует в новых приложениях использовать цикл сообщений Windows для ввода с клавиатуры и мыши вместо DirectInput (как указано в слайд-шоу Meltdown 2005) и использовать XInput вместо DirectInput для контроллеров Xbox 360.
DirectX включает DirectInput версии 1.0 (1995 г.). Первоначально он предлагал настоящую поддержку только для джойстиков, поскольку модули мыши и клавиатуры просто предоставляли оболочки для стандартного Win32 API. В DirectX версии 3.0 (1996 г.) добавлена поддержка клавиатур и мышей; также улучшена поддержка джойстика. DirectX 5.0 (1997) включал значительно улучшенную поддержку джойстика, включая добавление тактильной обратной связи, увеличение количества кнопок, изменение базовой модели драйвера устройства и включение API на основе COM. Поддержка мыши также увеличила количество видимых кнопок с четырех до восьми. В DirectX 7.0 (с 1999 г. по настоящее время) в DirectInput была добавлена давно обещанная функция просмотра отдельных мышей, очень похожая на отдельные джойстики, но эта функция не работала с более поздней версией Windows XP, хотя по состоянию на 2010 г. работает с Windows 98 / Me и DirectX 9. DirectX 8.0 (2000), последняя версия с существенными изменениями, включает отображение действий и более широкую поддержку для различных типов устройств.
Хотя изначально Microsoft предполагала, что DirectInput будет обрабатывать все входные данные, этого не произошло. С 2011 года Microsoft не рекомендует использовать DirectInput для клавиатур или мышей и начала продвигать новый XInput для контроллеров Xbox 360. В Windows Vista, Windows 7 и более поздних версиях Windows встроенный пользовательский интерфейс сопоставления действий был удален. DirectInput недоступен для приложений Магазина Windows.
XInput, API для контроллеров «следующего поколения», был представлен в декабре 2005 года одновременно с выпуском Xbox 360. Этот набор инструкций обеспечивает полную поддержку контроллеров Xbox 360 в Windows XP SP1 и последующих операционных системах и описывается Microsoft как более простой в программировании и требующий меньше настроек, чем DirectInput. XInput совместим с DirectX версии 9 и новее.
Контроллер Xbox 360 с драйвером Microsoft по умолчанию имеет следующие ограничения с DirectInput по сравнению с XInput:
Ни один из эти ограничения существуют при использовании контроллера Xbox 360 с XInput.
Эффекты вибрации не будут работать на контроллере Xbox One.
Согласно MSDN, "Комбинация левого и правого триггеров в DirectInput разработана специально. Игры всегда предполагали, что оси устройства DirectInput центрированы, когда пользователь не взаимодействует с устройством. Однако контроллер Xbox 360 был разработан для регистрации минимального значения, а не центра, когда триггеры не удерживаются ". MSDN предложила «решение» комбинирования триггеров, установив один триггер в положительном направлении, а другой в отрицательном направлении, так что никакое взаимодействие с пользователем не указывает на то, что DirectInput «элемент управления» находится в центре.
Однако выше игнорируется тот факт, что многие контроллеры DirectInput, такие как геймпады с двумя аналоговыми джойстиками и наборы контроллеров racing-wheel, уже отображают триггеры и педали независимо. Кроме того, многие устройства DirectInput также имеют эффекты вибрации. По крайней мере, один драйвер, XBCD, дает контроллерам Xbox 360 поддержку вибрации, мертвые зоны и (необязательно) независимые триггеры через DirectInput. Это говорит о том, что драйвер контроллера Microsoft Xbox 360 намеренно имеет более слабую поддержку DirectInput, а не из-за каких-либо различий между API DirectInput и XInput. С другой стороны, контроллер Xbox 360 и XInput поддерживают только базовое управление вибрационными двигателями, в отличие от большой палитры различных эффектов, поддерживаемых DirectInput.
Microsoft не сделала никаких основные изменения в DirectInput со времен DirectX 8 и представленный XInput позже в DirectX 9: остается некоторая путаница в отношении текущего статуса и будущего двух API.
API XInput с 2010 года также имеет ограничения, которых нет в DirectInput:
Преимущество XInput перед DirectInput:
С 2011 года XInput предназначен для контроллеров Xbox 360, а DirectInput - для любого контроллера. В XInput 1.4, представленной в Windows 8, была повторно введена поддержка запросов к устройствам гарнитуры.