DirectInputは、
マイクロソフトが開発したDirectXの一部であり、主にゲームにおけるユーザーからの入力を処理するためのAPIです。マウス、キーボード、
ジョイスティック、
ゲームコントローラーなど、様々な入力デバイスからの情報を収集し、アプリケーションに提供します。
DirectInputの主な機能
入力情報の収集: 様々な
入力機器からユーザーの操作情報を取得します。
アクションマッピング: 入力デバイスのボタンや座標を、ゲーム内の特定のアクションに割り当てることができます。これにより、異なるデバイスでも同じ操作感を実現できます。
フォースフィードバック: フォースフィードバックデバイスからの入力を処理し、ゲーム内の状況に応じて振動などの触覚フィードバックをユーザーに提供します。
DirectInputの歴史
当初、DirectInputは
ジョイスティックのみをサポートしていましたが、DirectX 3.0でキーボードとマウスのサポートが追加されました。DirectX 5.0では
ジョイスティックのサポートが大幅に強化され、フォースフィードバックに対応しました。また、DirectX 7.0では複数のマウスの接続が可能になりましたが、この機能は後のWindows XPでは動作しなくなりました。
DirectX 8.0ではアクションマッピングなど、様々な種類のデバイスを広くサポートする最後のメジャーアップデートとなりました。
マイクロソフトは当初DirectInputを全ての
入力機器を扱う方法として推奨していましたが、その後、この方針を撤回しました。現在ではキーボードとマウスの制御にはDirectInputではなくWindowsのメッセージループを、
Xbox 360コントローラーにはXInputを使うことを推奨しています。
これは、Windows XPでRaw Input APIが導入され、DirectInputがWM_INPUTデータを読み取るために追加のスレッドを使用するため、オーバーヘッドが増加するためです。キーボードやマウスのデータ取得においては、DirectInputを使用するメリットは少ないです。高解像度のマウス移動データが必要ない場合はWM_MOUSEMOVEを、高精度の操作が必要な場合はWM_INPUTを使うことが推奨されています。
XInputの導入
マイクロソフトは
Xbox 360の発売に合わせて、XInputという新しい入力
ライブラリを導入しました。XInputはDirectInputよりもプログラミングが簡単で、
Xbox 360コントローラーの機能を最大限に活用できます。XInputはDirectX 9以降で利用可能です。
DirectInputとXInputの比較
DirectInputはDirectX 8から大きな変更がなく、XInputはDirectX 9で導入されたため、2つのAPIの間にはいくつかの違いがあります。
DirectInput
様々な種類のデバイスに対応。
キーボード、マウス、
ジョイスティック、ゲームパッドなど、多様な入力デバイスをサポート。
最大アナログ8軸、128ボタン、フルレンジPOV(ハットスイッチ)をサポート。
古いデバイスもサポート。
最大同時接続数に制限なし。
XInput
主に
Xbox 360コントローラーを対象としたAPI。
最大同時接続数4台。
キーボード、マウスは非サポート。
アナログ4軸、10ボタン、デジタル8方向のみをサポート。
WindowsストアアプリではXInput 1.4のみ使用可能。
Xbox 360コントローラーにおけるDirectInputの制限
Xbox 360コントローラーと
マイクロソフトの標準ドライバーをDirectInputで使用すると、以下の制限があります。
左右のトリガーは独立したアナログ軸として機能せず、単一のデジタル方向として動作する。
振動機能が利用できない。
ヘッドセットデバイスの確認ができない。
これらの制限は、
マイクロソフトが
Xbox 360コントローラーのドライバーを意図的に制限しているためです。XBCDドライバーを使用すると、振動機能や独立したトリガーをDirectInput経由で利用できます。
DirectInputの継続利用
DirectInputは過去の技術と見なされつつありますが、コミュニティベースでの試みとして、フライトシミュレーターでフォースフィードバックAPI対応
ジョイスティックを使用可能にするXPForceプロジェクトが存在しています。
まとめ
DirectInputは、かつては主要な入力APIでしたが、現在はキーボードとマウスの入力にはWindowsのメッセージループを、
Xbox 360コントローラーにはXInputを使うことが推奨されています。DirectInputは幅広いデバイスをサポートする利点がありますが、XInputはプログラミングの容易さや
Xbox 360コントローラーの機能を最大限に活用できるという利点があります。どちらのAPIを選択するかは、開発するアプリケーションの種類や対象デバイスによって異なります。