Xbox Math ライブラリとの下位互換性

ここでは、Xbox Math ライブラリを使用しているコードでソースを大幅に変更せずに、即座に XNA Math ライブラリを使用できる方法について説明します。

XNA ライブラリ下位互換性サポートの使用

コードの移行を容易にするために、XNA Math ライブラリで公開される関数の大部分は Xbox Math ライブラリを使用するコードや Xbox 360 をターゲットとするコードに対して呼び出しの署名の互換性があります。

  • 呼び出しの署名の完全な下位互換性
  • 非推奨となった関数の可用性

呼び出しの署名の完全な下位互換性

Xbox 360 ベース コードの呼び出しの署名の完全な下位互換性は、xboxmath.h ヘッダーによって提供されます。

呼び出しの署名の完全な下位互換性の実現

  1. ソース コードにあるすべての xboxmath.h の部分を xnamath.h に置き換えます。
  2. xboxmath.h ヘッダーと xnamath.h ヘッダーの両方を含めないように注意してください。
  3. コードを再コンパイルします。

非推奨となった関数の可用性

xboxmath.h ヘッダーは、XNA Math ライブラリ関数のインライン呼び出しにより非推奨となった Xbox Math 関数を実装し、非推奨の Xbox Math 型および構造体を同等の XNA Math ライブラリ型および構造体にエイリアスします。

また、下位互換性モードでは、ベクトル アクセス関数を使用するアクセスとは反対に、ベクトル成分への直接アクセスもサポートされています。

非推奨となった関数、型、および構造体のリストは、次の参照先で確認できます。

C 言語バインド

XNA Math ライブラリへの C 言語バインドの制限付きサポートは、従来の Xbox Math ライブラリでサポートされている使用シナリオのために用意されています。

C 言語バインド サポートは、次の場合に利用できます。

  • コンパイル ターゲットが Xbox 360 で、VMX128 組み込み関数サポートが有効な場合 (VMX128 組み込み関数の詳細については、「VMX128 ベクトル算術命令の概要」を参照してください)。

    このためには、_XM_VMX128_INTRINSICS_ が定義済みで、_XM_NO_INTRINSICS_ が定義されていないことが必要です。

  • _XM_NO_INTRINSICS_ コードパスがサポートされるすべてのプラットフォーム。組み込み関数のサポートが無効の場合。

    この場合、呼び出し規則の制限により XNA Math ライブラリの C 言語バインドのパフォーマンスは最適ではありません。

一般に、すべてのプラットフォームで C++ を使用することを強くお勧めします。

既知の制限

XNA Math ライブラリで提供される Xbox Math ライブラリ下位互換性サポートには、既知のプログラミング上の制限があります。

制限事項 説明
XMVECTOR に対する XMVECTORI のキャスト

以前の Xbox Math ライブラリ リリースでは、XMVECTOR オブジェクトを次の形式のキャストを使用して XMVECTORI から取得できました。

   XMVECTORI vect = { … };   XMVECTOR xm = *(XMVECTOR)vect;

XNA Math 下位互換モード (Xboxmath.h を含む場合) でコンパイルするには、次のようにする必要があります。

   XMVECTORI vect = { … };   XMVECTOR xm = *(XMVECTOR*)&vect; 

より簡素化した場合は、次のとおりです。

   XMVECTOR xm = vect;
Ee418724.note(ja-jp,VS.85).gif
C バインドを使用する場合、次のようにする必要があります。
         XMVECTOR xm = vect.v;
XMVECTOR に対する XMVECTORU32 のキャスト

以前の Xbox Math ライブラリ リリースでは、XMVECTOR オブジェクトを次の形式のキャストを使用して XMVECTORU32 から取得できました。

   XMVECTORU32 vect = { … };   XMVECTOR xm = *(XMVECTOR)vect;

XNA Math 下位互換モード (Xboxmath.h を含む場合) でコンパイルするには、次のようにする必要があります。

   XMVECTORU32 vect = { … };   XMVECTOR xm = vect; 
Ee418724.note(ja-jp,VS.85).gif
C バインドを使用する場合、次のようにする必要があります。
       XMVECTORU32 vect = {…};       XMVECTOR xm = vect.v;

下位互換性サポートの範囲

Xboxmath.h ヘッダーを使用して提供される下位互換性サポートには、次のように複数の制限があります。

  1. Xboxmath.h で提供される下位互換性サポートは、主に Xbox 360 を対象とするコードをサポートするために用意されています。

    このため、下位互換性サポートは XNA Math ライブラリでサポートされるすべてのプラットフォームに対して最適であるわけではありません。

  2. xboxmath.h ヘッダーにより提供される下位互換性レイヤーを通じて、XNA Math ライブラリに新しい算術機能のサポートを追加することを確約することはできません。

注意

移植性と最適化を考慮して、コードを移行し、XNA Math ライブラリ サポートを活用することがいかに最適な方法であるかについては、「Xbox Math ライブラリからのコードの移行」を参照してください。