다이렉트인풋

다이렉트인풋(DirectInput)은 컴퓨팅에서 마우스, 키보드 또는 게임패드와 같은 입력 장치를 통해 컴퓨터 사용자로부터 입력을 수집하기 위한 레거시 마이크로소프트 API이다. 또한 사용자가 게임 내의 특정 동작을 입력 장치의 버튼과 축에 할당할 수 있는 동작 매핑 시스템을 제공한다. 또한 촉각 피드백(입력/출력) 장치를 처리한다. 마이크로소프트는 엑스박스 360 컨트롤러용으로 특별히 XInput이라는 새로운 입력 라이브러리를 도입했다.

다이렉트인풋 및 XInput은 일반 Win32 입력 이벤트에 비해 이점을 제공한다.

 이를 통해 애플리케이션이 백그라운드에 있을 때에도 입력 장치에서 데이터를 검색할 수 있다.
 모든 유형의 입력 장치와 햅틱 피드백을 완벽하게 지원한다.
 작업 매핑을 통해 애플리케이션은 해당 입력을 생성한 장치 종류를 알 필요 없이 입력 데이터를 검색할 수 있다.

다이렉트인풋은 DirectX 라이브러리의 일부를 구성하지만 DirectX 8(2001-2002) 이후 크게 개정되지 않았다. 마이크로소프트는 새로운 응용 프로그램이 다이렉트인풋(멜트다운 2005 슬라이드쇼에 표시된 대로) 대신 키보드 및 마우스 입력에 윈도우 메시지 루프를 사용하고 컨트롤러에 다이렉트인풋 및 기타 레거시 API(예: XInput) 대신 게임인풋을 사용할 것을 권장한다.

 역사 
DirectX는 1.0 버전(1995년)부터 다이렉트인풋을 포함했다. 초기에는 조이스틱에 대해서만 진정한 지원을 제공했는데, 마우스와 키보드 모듈은 단순히 표준 Win32 API에 대한 래퍼를 제공하는 수준이었기 때문이다. DirectX 3.0 버전(1996년)에서 키보드와 마우스 지원이 추가되었으며, 조이스틱 지원도 개선되었다. DirectX 5.0(1997년)에는 햅틱 피드백 추가, 버튼 수 증설, 기본 장치 드라이버 모델 변경 및 COM 기반 API 통합 등 크게 개선된 조이스틱 지원이 포함되었다. 마우스 지원 또한 인식 가능한 버튼 수가 4개에서 8개로 늘어났다. DirectX 7.0(1999년~)에서 다이렉트인풋은 개별 조이스틱처럼 개별 마우스를 인식하는 기능을 추가하겠다고 오래전부터 약속했던 기능을 추가했으나, 이 기능은  윈도우 98/Me 및 DirectX 9에서는 작동함에도 불구하고 이후 출시된 윈도우 XP에서는 작동하지 않았다. 주요 변경 사항이 포함된 마지막 버전인 DirectX 8.0(2000년)에는 액션 매핑과 다양한 유형의 장치에 대한 광범위한 지원이 포함되었다.

마이크로소프트는 처음에 다이렉트인풋이 모든 입력을 처리하도록 의도했으나, 이는 뜻대로 되지 않았다.  마이크로소프트는 더 이상 키보드나 마우스에 다이렉트인풋을 사용하는 것을 권장하지 않으며, 엑스박스 360 컨트롤러를 위해 더 새로운 XInput을 밀기 시작했다. 윈도우 비스타, 윈도우 7 및 이후의 윈도우 버전에서는 내장된 액션 매핑 UI가 제거되었다. 다이렉트인풋은 윈도우 스토어 앱에서 사용할 수 없다.

 XInput 

"차세대" 컨트롤러를 위한 더 최신이지만 이제는 레거시가 된 API인 XInput은 2005년 12월 엑스박스 360의 출시와 함께 도입되었다. 이 사양은 윈도우 XP SP1 및 이후 운영 체제에서 엑스박스 360 컨트롤러에 대한 지원을 제공하며, 마이크로소프트는 이를 다이렉트인풋보다 프로그래밍이 쉽고 설정이 덜 필요하다고 설명한다. XInput은 DirectX 9 버전 이상과 호환된다.

 엑스박스 360 컨트롤러 지원 

기본 마이크로소프트 드라이버를 사용하는 엑스박스 360 컨트롤러는 XInput과 비교했을 때 다이렉트인풋에서 다음과 같은 제한 사항이 있다.

 버튼이 정확하지 않다. 이는 컨트롤러 리매핑을 지원하지 않는 게임에서 문제를 일으킬 수 있다.
 왼쪽 및 오른쪽 트리거가 독립적인 아날로그 축이나 버튼으로 작동하지 않고, 두 트리거 간의 부호 있는 차이를 나타내는 단일 축으로 작동한다.
 진동 효과가 작동하지 않는다.
 헤드셋 장치 쿼리가 작동하지 않는다. 윈도우 8의 일부로 도입된 XInput 1.4에서 엑스박스 헤드셋 지원이 추가되었다.

MSDN에 따르면, "다이렉트인풋에서 왼쪽 및 오른쪽 트리거의 결합은 의도된 설계이다. 게임은 항상 사용자가 장치와 상호작용하지 않을 때 다이렉트인풋 장치 축이 중앙에 있다고 가정해 왔다. 그러나 엑스박스 360 컨트롤러는 트리거를 누르고 있지 않을 때 중앙이 아닌 최소값을 등록하도록 설계되었다." MSDN은 트리거를 결합하여 한 트리거는 양의 방향으로, 다른 트리거는 음의 방향으로 설정함으로써 사용자의 상호작용이 없는 상태가 다이렉트인풋에 "컨트롤"이 중앙에 있는 것으로 표시되도록 하는 "해결책"을 제시했다.

그러나 위의 내용은 듀얼 아날로그 스틱이 있는 게임패드나 레이싱 휠 컨트롤러 세트와 같은 많은 다이렉트인풋 컨트롤러들이 이미 트리거와 페달을 독립적으로 매핑하고 있다는 사실을 간과하고 있다. 또한 많은 다이렉트인풋 장치들도 진동 효과를 가지고 있다. 적어도 하나의 서드파티 드라이버인 XBCD는 엑스박스 360 컨트롤러에 XInput 드라이버가 가진 진동 지원, 데드존, 그리고 (선택적으로) 독립적인 아날로그/디지털 트리거 기능을 다이렉트인풋을 통해 제공한다. 이는 마이크로소프트의 엑스박스 360 컨트롤러 드라이버가 다이렉트인풋과 XInput API 간의 차이 때문이라기보다 의도적으로 취약한 다이렉트인풋 지원을 받았음을 시사한다. 반면, 다이렉트인풋을 통해 지원되는 방대한 효과의 팔레트와 대조적으로, XInput을 사용하는 엑스박스 360 컨트롤러는 진동 모터의 매우 기본적인 제어만을 지원한다.

 각주 

 외부 링크 
 Microsoft's DirectInput documentation 
 XInput and DirectInput

분류:DirectX