![]() |
DirectInputはマイクロソフトによって開発されたソフトウェアコンポーネント「Microsoft DirectX」のうちのひとつであり、マウス、キーボード、ジョイスティック、ゲームコントローラ等を介してユーザーからの入力情報を収集するためのAPIである。DirectInputはまたゲーム中の入力機器のボタンや座標を特定のアクションに割り当てる「アクションマッピング」のシステムを提供する。さらに「フォースフィードバック」デバイスの入出力を扱う。
マイクロソフトはDirectX 9でXbox 360用コントローラーのためのXInputという新しい入力ライブラリを導入した。
DirectInputとXInputは通常のWin32アプリケーションにも利点がある。
DirectInputはDirectXライブラリの一部であるが、DirectX 8から大きな変更がない。2005年のMeltdownでのプレゼンテーション[1][リンク切れ]でマイクロソフトは、新しいアプリケーションはキーボードとマウスを制御するのにDirectInputではなくWindowsのメッセージループを活用して、Xbox 360のコントローラーでもDirectInputではなくXInputを使うように推奨した。
DirectInputはDirectXの一部であった。当初は実際はジョイスティックだけをサポートしており、マウスとキーボードの部分は標準Win32 APIの単なるラッパーであった。DirectXバージョン3.0よりキーボードとマウスがサポートされるようになり、ジョイスティックのサポートも改善した。DirectX 5.0ではジョイスティックのサポートを大幅に強化し、フォースフィードバックに対応し、ボタン数が増え、基盤となるデバイスドライバモデルが変更された。マウスでもボタン数が4から8に増えた。DirectX 7.0では長い間待望だった複数のマウスの接続が可能になり、ジョイスティックのように個別に操作できるようになったが、後にリリースされたWindows XPではこの機能が動作しなくなった(Windows 98/MEとDirectX 9の組み合わせでは引き続き動作していた)。DirectX 8.0はアクションマッピングや様々な異なる種類の装置を広くサポートする最後のメジャーバージョンアップとなった。
マイクロソフトは元々DirectInputを全ての入力機器を取り扱う方法として売り込んだが、のちにこの方針は撤回された。以後、マイクロソフトはDirectInputを使ってキーボードとマウスを制御することを推奨しておらず、Xbox 360コントローラーの利用にも新しいXInputを推奨している。というのも、Windows XPではRaw Input API[1]のサポートが追加され、WM_INPUT
[2]というウィンドウメッセージが追加されたが、DirectInputはWM_INPUT
のデータを読み取る2つ目のスレッドを内部的に作成するため、DirectInput APIを使用することによって、単にWM_INPUT
を直接読み取る場合よりもオーバーヘッドが増加してしまうからである[3][4]。マウスまたはキーボードのデバイスからデータを読み取る場合は、DirectInputを使用する利点はない。高解像度マウスの移動データが必要ない場合はWM_MOUSEMOVE
を、高精度の制御が必要なFPSゲームでのエイミング操作のようにパフォーマンス最適化の観点から高解像度マウスのサポートが求められる場合はWM_INPUT
を用いることが推奨されている。
XInputは「次世代」コントローラーのためのAPIであり、Xbox 360の発売と共に導入され、Xbox 360コントローラーの全ての機能がWindows XP SP1以上で利用できるようになった。XInputはDirectInputよりもプログラムが劇的に簡単になる利点がある。XInputはDirectX 9以上から利用できる。
DirectInputはDirectX 8から大きな変更が無く、XInputは後のDirectX 9で導入され、2つのAPIの現状と将来には若干の混乱がある。現在はお互いにない特徴があり、そしていずれもDirectX 10で大きな変更はない。
Xbox 360用コントローラーとマイクロソフトのデフォルトのWindowsドライバの組み合わせにおいてDirectInputを使う場合、XInputと比較して以下の制約がある。
MSDNによると、以下のような説明および解決策が記載されている[5][6]。
DirectInput の左右のトリガーの組み合わせは、意図的なもの[7]です。ゲームでは、DirectInput デバイスとユーザーとの対話操作がない場合、このデバイスの軸は常に中央に配置されると想定しています。ただし、トリガーが保持されない場合、Xbox 360 コントローラーは中心ではなく最小値を登録するように設計されていました。したがって、以前のゲームはユーザーの対話操作を想定しています。この解決策とは、トリガーを組み合わせて、あるトリガーを正の方向に設定し、もう 1 つのトリガーを負の方向に設定するというものでした。それによって、DirectInput に"制御"が中央にあることをユーザーの対話操作で示すことがなくなります。
これはしかしながら、デュアルアナログスティックのあるゲームパッドやハンドルコントローラーなどのような様々なDirectInputコントローラーが既にトリガーやペダルに個々に割り当て済みであるという事実を無視していた。しかも多くのDirectInputデバイスには振動機能も搭載されていた。Xbox 360用コントローラーで振動機能をサポートし、デッドゾーンの検知や、(オプションとして)独立したトリガーをDirectInput経由で利用できる、XBCDというドライバが存在している。これはDirectInputとXInputのAPIの違いによるものというよりはむしろ、マイクロソフトが提供するXbox 360用コントローラーのドライバは「意図的に」DirectInputでの機能を制限していることを示している。
現在XInputのAPIはDirectInputにはない制約もある。
DirectInputは従来から存在する規格のため、対応するドライバーが用意されているデバイスも豊富だが、XInputは後発のため、主要な対応デバイスとしてはXbox 360用の純正コントローラーおよびXbox One用の純正コントローラー[8]のみである。ただし、サードパーティー製の各種コントローラーもDirectInput/XInput両対応の製品がいくつか発売されている[9][10]。
Windows 8で導入されたWindowsストアアプリでは、XInput 1.4のみが使用可能であり、デスクトップアプリ向けのXInput (1.1/1.2/1.3, 9.1.0) およびDirectInputは使用できない[11]。XInput 1.4ではオーディオヘッドセットの問い合わせ機能が追加されている[12]。
2022年現在、DirectInputは過去の技術とみなされているが、コミュニティベースでの試みとして、フライトシミュレーターをForce feedback API対応ジョイスティックで使用可能にする、XPForce プロジェクトが存在する[13]。
マイクロソフトのAPIとフレームワーク | |
---|---|
グラフィック | |
オーディオ | |
マルチメディア | |
ウェブ | |
データアクセス | |
ネットワーク | |
コミュニケーション | |
管理 | |
コンポーネントモデル | |
ライブラリ | |
デバイスドライバ | |
セキュリティ | |
.NET | |
ソフトウェアファクトリー | |
IPC | |
アクセシビリティ | |
テキストと多言語 サポート | |
人工知能 | |