Petite et grande endianité dans les jeux

16

Devons-nous nous soucier des ordres d'octets dans le processus de programmation d'un jeu? Les consoles de jeu utilisent-elles des ordres d'octets différents?

saadtaame
la source
1
Êtes-vous préoccupé par un projet spécifique sur lequel vous travaillez actuellement ou simplement en général? Généralement, si vous écrivez un jeu pour une console, vous utiliserez probablement un ensemble d'outils bien documentés comme XNA et les entrées et sorties seront couvertes dans son document.
wolfdawn
4
Si vous êtes inquiet à ce sujet, je recommande vraiment l' erreur de l'ordre des octets de Rob Pike - essayer de vous soucier de l'ordre des octets vous pose souvent plus de problèmes que de simplement l'ignorer et écrire du code vraiment indépendant de l'endian.
1
C'est une bonne lecture, mais Rob montre que vous pouvez obtenir des lectures simplifiées au prix d'avoir besoin d'écritures plus complexes. Si ce n'est pas vous qui faites les écritures, tant mieux!
Kylotan

Réponses:

14

Si vous écrivez du code réseau, c'est souvent quelque chose que vous devez gérer, oui.

Il est également possible que la commande d'octets dans un format de fichier ne soit pas celle utilisée par votre plate-forme, donc parfois cela compte aussi.

Kylotan
la source
8

Devez-vous vous en soucier? Probablement pas. Une grande majorité de la programmation de jeux va être à un niveau tel que l'endianisme est abstrait. Même en réseau, vous allez presque certainement utiliser une bibliothèque pour les protocoles de réseau. C'est bien que vous en soyez conscient, mais je doute que vous rencontriez un problème avec cela.

MichaelHouse
la source
5

La plupart du temps, non.

Endianess est généralement résumé dans les modules de haut niveau d'un moteur de jeu, et vous n'avez pas à vous en soucier quotidiennement. S'il n'est pas abstrait, le moteur a un problème grave et devrait être corrigé, car ce n'est pas le genre de détails dont vous devriez vous soucier lorsque vous créez un jeu.

Cependant, si vous travaillez sur certaines parties de bas niveau d'un moteur multiplateforme C / C ++, vous devrez peut-être y faire face. Les trois consoles de génération actuelle utilisent une architecture PowerPC, qui est big-endian, tandis que l'architecture x86 utilisée sur PC est little-endian. Donc, si vous travaillez sur du code qui lit des octets bruts de quelque part pour les mettre dans des structures de données (sérialisation binaire, mise en réseau ...), oui, vous devrez y faire face.

Par exemple, en C / C ++, il est courant de voir ce type d'échange d'octets en action (non testé, accueillant les corrections):

// 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
}

Encore une fois, c'est OK dans le code de bas niveau, mais cela ne devrait pas être quelque chose utilisé partout.

Laurent Couvidou
la source
3

Cela dépend des plateformes que vous ciblez. Par exemple, je crois que la PS3 est grande endurance, donc si c'est l'un de vos objectifs, c'est quelque chose dont vous devez être conscient, oui.

Dans l'espace informatique domestique, les "Big 3" (Windows, Linux, Mac) sont tous exclusivement ou presque exceptionnellement sur les architectures Intel x86 / x64 de nos jours, donc les problèmes d'endienness ne sont plus d'actualité.

Maximus Minimus
la source
N'est plus pertinent? D'après mon expérience (2-3 jeux dans quelques sociétés et 7 ans, les deux MMO ... donc anecdotiques plutôt que statistiquement valables), chacun des marchés PS et Xbox représente environ le double de la taille du marché Windows, les Mac étaient une petite fraction de fenêtres, et Linux était sensiblement plus petit que cela. À moins que votre jeu ne puisse tout simplement pas fonctionner sur une console, vous laissez 80% de vos bénéfices sur le terrain en vous en tenant aux PC. Le code cross-endian signifie également que vos serveurs peuvent être sur des machines complètement différentes de vos clients (ex: tous les jeux de console client-serveur jamais).
Mark Storer
@MarkStorer - Je pense que vous devez relire ce que j'ai réellement écrit.
Maximus Minimus