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を選択するかは、開発するアプリケーションの種類や対象デバイスによって異なります。