Xbox Math ライブラリとの下位互換性
ここでは、Xbox Math ライブラリを使用しているコードでソースを大幅に変更せずに、即座に XNA Math ライブラリを使用できる方法について説明します。
XNA ライブラリ下位互換性サポートの使用
コードの移行を容易にするために、XNA Math ライブラリで公開される関数の大部分は Xbox Math ライブラリを使用するコードや Xbox 360 をターゲットとするコードに対して呼び出しの署名の互換性があります。
- 呼び出しの署名の完全な下位互換性
- 非推奨となった関数の可用性
呼び出しの署名の完全な下位互換性
Xbox 360 ベース コードの呼び出しの署名の完全な下位互換性は、xboxmath.h ヘッダーによって提供されます。
呼び出しの署名の完全な下位互換性の実現
- ソース コードにあるすべての xboxmath.h の部分を xnamath.h に置き換えます。
- xboxmath.h ヘッダーと xnamath.h ヘッダーの両方を含めないように注意してください。
- コードを再コンパイルします。
非推奨となった関数の可用性
xboxmath.h ヘッダーは、XNA Math ライブラリ関数のインライン呼び出しにより非推奨となった Xbox Math 関数を実装し、非推奨の Xbox Math 型および構造体を同等の XNA Math ライブラリ型および構造体にエイリアスします。
また、下位互換性モードでは、ベクトル アクセス関数を使用するアクセスとは反対に、ベクトル成分への直接アクセスもサポートされています。
非推奨となった関数、型、および構造体のリストは、次の参照先で確認できます。
- 非推奨となった XNA Math ライブラリ ロード関数
- 非推奨となった XNA Math ライブラリ ベクトル格納関数
- 非推奨となった XNA Math ライブラリ ベクトル関数
- 非推奨となった XNA 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;
注
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;
注
C バインドを使用する場合、次のようにする必要があります。
XMVECTORU32 vect = {…}; XMVECTOR xm = vect.v; |
下位互換性サポートの範囲
Xboxmath.h ヘッダーを使用して提供される下位互換性サポートには、次のように複数の制限があります。
Xboxmath.h で提供される下位互換性サポートは、主に Xbox 360 を対象とするコードをサポートするために用意されています。
このため、下位互換性サポートは XNA Math ライブラリでサポートされるすべてのプラットフォームに対して最適であるわけではありません。
xboxmath.h ヘッダーにより提供される下位互換性レイヤーを通じて、XNA Math ライブラリに新しい算術機能のサポートを追加することを確約することはできません。
注意
移植性と最適化を考慮して、コードを移行し、XNA Math ライブラリ サポートを活用することがいかに最適な方法であるかについては、「Xbox Math ライブラリからのコードの移行」を参照してください。