Müssen wir uns beim Programmieren eines Spiels um die Reihenfolge der Bytes kümmern? Verwenden Spielekonsolen unterschiedliche Bytereihenfolgen?
Müssen wir uns beim Programmieren eines Spiels um die Reihenfolge der Bytes kümmern? Verwenden Spielekonsolen unterschiedliche Bytereihenfolgen?
Antworten:
Musst du dir darüber Sorgen machen? Wahrscheinlich nicht. Die überwiegende Mehrheit der Spielprogramme wird auf einer solchen Ebene sein, dass die Endianität abstrahiert wird. Selbst in Netzwerken werden Sie mit ziemlicher Sicherheit eine Bibliothek für Netzwerkprotokolle verwenden. Es ist gut, dass Sie sich dessen bewusst sind, aber ich bezweifle, dass Sie damit auf ein Problem stoßen würden.
Meistens nein.
Endianess wird normalerweise in den High-Level-Modulen einer Game-Engine entfernt, und Sie müssen sich nicht täglich darum kümmern. Wenn es nicht abstrahiert ist, hat die Engine ein ernstes Problem und sollte behoben werden, da dies nicht die Art von Details sind, über die Sie sich beim Erstellen eines Spiels Gedanken machen sollten.
Wenn Sie jedoch an Teilen einer C / C ++ - Engine mit mehreren Plattformen auf niedriger Ebene arbeiten, müssen Sie sich möglicherweise damit befassen. Alle drei Konsolen der aktuellen Generation verwenden eine PowerPC-Architektur, bei der es sich um Big-Endian handelt, während es sich bei der auf PCs verwendeten x86-Architektur um Little-Endian handelt. Wenn Sie also an Code arbeiten, der unformatierte Bytes liest, um sie in Datenstrukturen einzufügen (binäre Serialisierung, Vernetzung ...), müssen Sie sich damit befassen.
In C / C ++ ist es beispielsweise üblich, diese Art von Byte-Austausch in Aktion zu sehen (nicht getestet, Korrekturen werden begrüßt):
// 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
}
Wieder ist dies in Code auf niedriger Ebene in Ordnung, dies sollte jedoch nicht überall verwendet werden.
Das hängt von den Plattformen ab, auf die Sie abzielen. Ich glaube zum Beispiel, dass die PS3 ein Big-End ist. Wenn das also eines Ihrer Ziele ist, müssen Sie sich dessen bewusst sein, ja.
Im Bereich der Heimcomputer sind die "Big 3" (Windows, Linux, Mac) heutzutage ausschließlich oder fast ausschließlich auf Intel x86 / x64-Architekturen installiert, sodass Endienheitsbedenken keine Rolle mehr spielen.