Microsoft DirectX 8.0 (C++) |
ハードウェア ドライバは、Microsoft® DirectInput® が定義するカテゴリに当てはまらない特殊効果をサポートすることができる。このようなエフェクトに対応するタイプ固有のパラメータは、ハードコーディングされていることもあれば、アプリケーションで変更できることもある。
タイプ固有のパラメータが変更可能な場合、アプリケーション開発者は、エフェクトにより要求されるデータ構造を宣言しているヘッダー ファイルを取得しなければならない。
ハードウェア ベンダーは、そのデバイス固有エフェクトを識別する GUID を提供しなければならない。またハードウェア ベンダーは、そのエフェクトに対するタイプ固有パラメータ用の特別な構造体を提供することもある。次に、アプリケーションは、DIEFFECT 構造体とそのエフェクトに対するタイプ固有構造体を、ほかのどのエフェクトでも同様だが、初期化しなければならない。次に、IDirectInputDevice8::CreateEffect メソッドを呼び出し、デバイス GUID と DIEFFECT 構造体へのポインタを渡す。
DIEFFECTINFO 構造体にデバイス エフェクトについての情報が入るが、そのメンバ dwEffType (DIEFT_GETTYPE(dwEfftype)) の下位バイトは、定義済みの DirectInput のエフェクトタイプ (コンスタント フォース、傾斜フォース、周期的エフェクト、条件) のどれにデバイス エフェクトが分類されるのかを示している。定義済みのカテゴリのどれにも分類できない場合、下位バイトの値は DIEFT_HARDWARE である。
デバイス固有のエフェクトが定義済みのいずれかの種類に分類できれば、DIEFFECT 構造体の lpvTypeSpecificParams メンバはその種類に応じて、DICONSTANTFORCE 構造体、DIRAMPFORCE 構造体、DIPERIODIC 構造体、または DICONDITION 構造体を指し、cbTypeSpecificParams メンバはその構造体のサイズと同じ値でなくてはならない。
DIEFT_GETTYPE(dwEfftype) の値が DIEFT_HARDWARE であれば、lpvTypeSpecificParams メンバおよび cbTypeSpecificParams メンバの値は、そのエフェクトが特別なタイプ固有パラメータを必要としているかどうかによって決まる。特別なパラメータを必要とするときは、この 2 つのメンバの値は、メーカーのヘッダー ファイルで定義され、各自のアプリケーションで宣言および初期化された、適切な構造体を指さなくてはならない。そのエフェクトが特別なパラメータを必要としない場合、すなわち、ハードウェア エフェクト用の DIEFFECTINFO 構造体の dwStaticParms メンバに DIEP_TYPESPECIFICPARAMS フラグがないときは、lpvTypeSpecificParams は NULL で、cbTypeSpecificParams はゼロでなければならない。
DirectInput は確認のため、GUID と DIEFFECT 構造体をデバイス ドライバに渡す。GUID が未知である場合、デバイスは DIERR_DEVICENOTREG を返す。GUID は既知でも、タイプ固有データがそのエフェクトに対して不正確である場合は、デバイスは DIERR_INVALIDPARAM を返す。