次の方法で共有


エフェクトのダウンロードとアンロード

エフェクトを再生するには、その前にエフェクトをデバイスにダウンロードする必要があります。エフェクトのダウンロードは、ドライバーにエフェクトの再生準備を指示することを意味します。準備方法は完全にドライバーに依存します。一般に、ドライバーはエフェクトのパラメーターをハードウェア メモリーに配置して、デバイスとシステム間のその後のデータ転送を最小限に抑えます。結果として遅延が減少しますが、このことは、発射ボタンなど、トリガーに反応して再生される条件やエフェクトでは特に重要です。デバイスが軸の移動やボタンの押し下げに反応するためにシステムとまったく通信する必要がない状態が理想的です。

デバイスがいっぱいでなく、排他協調レベルで取得されている場合は、エフェクトを作成すると、ダウンロードが自動的に実行されます。既定では、エフェクトを開始するか、エフェクトのパラメーターを変更したときにも、ダウンロードが実行されます。

パラメーターの変更時に DIEP_NODOWNLOAD フラグを指定する場合は、その後、IDirectInputEffect::Download メソッドを使用してエフェクトをダウンロードまたは更新する必要があります。

たとえば、デバイスが排他フォアグラウンド協調レベルで取得されている場合に、アプリケーションがバックグラウンドに移動するなどしてデバイスの取得が解除されると、エフェクトはアンロードされます。アプリケーションが再びフォアグラウンドになったときには、エフェクトを再度ダウンロードする必要があります。このダウンロードは、IDirectInputEffect::Start メソッドを呼び出すと自動的に実行されますが、デバイスの再取得時にすべてのエフェクトをすぐにダウンロードすることもできます。トリガー ボタンに関連付けられたエフェクトの場合は、通常、IDirectInputEffect::Start メソッドが呼び出されないため、このようなエフェクトは常にダウンロードする必要があります。

アプリケーションがエフェクトのダウンロード時に DIERR_DEVICEFULL エラーを受け取った場合は、古いエフェクトをアンロードして、新しいエフェクト用の空きを確保する必要があります。エフェクトは、IDirectInputEffect::Unload メソッドを呼び出してデバイスから削除することができます。また、IDirectInputDevice8::SendForceFeedbackCommand メソッドを呼び出してデバイスをリセットすることにより、すべてのエフェクトを削除することもできます。