Microsoft DirectX 8.0 (C++) |
エフェクトは再生する前にデバイスにダウンロードしなければならない。エフェクトのダウンロードとは、ドライバにエフェクトの再生の準備をするように通知することである。ダウンロードの方法を決定するのはまったくドライバに任せられる。一般に、ドライバはエフェクトのパラメータをハードウェア メモリに置き、デバイスとシステムの間のデータ順次転送を最小限に抑える。これにより、遅延時間が削減される。このことは、"発射" ボタンのように、トリガへの応答で機能する条件とエフェクトにとっては特に意味がある。デバイスが軸移動とボタン押下に応答するためにシステムとまったくやりとりを行う必要がない、というのが理想的だろう。
デバイスが満杯ではなくしかも排他協調レベルで取得されている場合には、エフェクトの作成時にダウンロードが自動的に行われる。エフェクトを開始、またはエフェクトのパラメータを変更するときも、ダウンロードはデフォルトで行われる。
パラメータを変更するときに DIEP_NODOWNLOAD フラグを指定すれば、引き続き IDirectInputEffect::Download メソッドを使用してエフェクトのダウンロードやアップロードを行わなければならない。
デバイスが未取得状態のとき (たとえば、デバイスが排他フォアグラウンド協調レベルで取得されていて、アプリケーションがバックグラウンドに移行するとき)、エフェクトはアンロードされているので、アプリケーションがフォアグラウンドを再取得するときに再びエフェクトをダウンロードしなければならない。エフェクトのダウンロードは、IDirectInputEffect::Start メソッドを呼び出すと自動的に行われる。しかし、デバイスを再取得すると同時にすべてのエフェクトをダウンロードするかどうかを選択することはできる。Start メソッドは通常トリガ ボタンに割り付けたエフェクトでは呼び出されないので、この種のエフェクトは必ずダウンロードする必要がある。
エフェクトのダウンロード中にアプリケーションが DIERR_DEVICEFULL エラーを受けたら、古いエフェクトをアンロードして新しいエフェクトのためのスペースを確保する必要がある。IDirectInputEffect::Unload メソッドを呼び出せば、デバイスから 1 つのエフェクトを削除することができる。また、IDirectInputDevice8::SendForceFeedbackCommand メソッドを呼び出してデバイスをリセットすれば、すべてのエフェクトを削除することもできる。
フォース フィードバック デバイスを生成すると、ハードウェアとドライバがリセットされるので、存在していたエフェクトすべてが消去される。