ゲームのプログラミングの過程でバイトオーダーを心配する必要がありますか?ゲーム機は異なるバイトオーダーを使用しますか?
ゲームのプログラミングの過程でバイトオーダーを心配する必要がありますか?ゲーム機は異なるバイトオーダーを使用しますか?
回答:
ほとんどの場合、いいえ。
エンディアネスは通常、ゲームエンジンの高レベルモジュールで抽象化されており、日常的に心配する必要はありません。抽象化されていない場合、エンジンには重大な問題があり、修正する必要があります。これは、ゲームを作成するときに心配する必要のある詳細ではないためです。
ただし、C / C ++マルチプラットフォームエンジンの低レベルの部分で作業している場合は、対処する必要があります。3つの現行世代のコンソールはすべて、ビッグエンディアンのPowerPCアーキテクチャを使用しますが、PCで使用されるx86アーキテクチャはリトルエンディアンです。したがって、どこかから生のバイトを読み取ってデータ構造に入れるコード(バイナリシリアル化、ネットワーキングなど)で作業している場合は、そうする必要があります。
たとえば、C / C ++では、この種のバイトスワッピングが動作しているのが一般的です(テストされていないため、修正を歓迎します)。
// Assume bytes comes ordered as big-endian
u16 u16FromBytes(void* data)
{
#if BIG_ENDIAN
return (u16(data[0]) << 8) + u16(data[1]);
#else // LITTLE_ENDIAN
return (u16(data[1]) << 8) + u16(data[0]);
#endif
}
繰り返しますが、これは低レベルのコードでは問題ありませんが、これはどこでも使用されるべきではありません。
ターゲットとするプラットフォームによって異なります。たとえば、PS3はビッグエンディアンであると信じているので、それがあなたのターゲットの1つである場合、それはあなたが知っておく必要があるものです、はい。
自宅のコンピューター空間では、「Big 3」(Windows、Linux、Mac)はすべてIntel x86 / x64アーキテクチャ上で排他的または例外的にすべてであるため、エンディアンの懸念はもはや関係ありません。