Hi,
Ich weiss ja,das es Dich beim Verstaendnis nicht viel weiterbringen wird, aber wer hat das verbrochen und warum?
Ich glaube, dass ich dieses Beispiel aus einem Anfänger-SDL-Tutorial habe, wobei ich hier aunahmsweise mal auf die Richtigkeit vertraute, da ich über speicherinterne Prozesse, vor allem bezüglich Grafiken, noch nicht so viel weiß.
void setpixel(SDL_Surface *surface, int x, int y, Uint8 R, Uint8 G, Uint8 B) {
int bbp = surface->format->BytesPerPixel;
>
> Was passiert wenn surface->format->BytesPerPixel nicht oder falsch belegt ist?
> Wird das vorher geprueft?
Nein, außer es basiert irgendwie auf den selben Grundlagen wie die Initialisierung von SDL. Ich denke mir einfach, dass es gar nicht nicht belegt sein kann, da sonst SDL nicht initialisiert werden könnte, und das Programm gar nicht ausgeführt werden könnte.
> > ~~~c
> > pixaddr[0] = pixel & 0xff;
> > pixaddr[1] = (pixel >> 8) & 0xff;
> > pixaddr[2] = (pixel >> 16) & 0xff;
> >
Das koennte moeglich sein, allerdings ist hin und wieder auch die Reihenfolge der Zuweisung wichtig, was aber dann auch in fast allen Faellen ein deutliches Zeichen von Murks ist. Duerfte aber wirklich nur ein C&P Fehler gewesen sein: Zeilen per C&P umsortiert, aber vergessen die Indizes zu aendern.
Scheint mir auch so.
Allerdings und nicht zuletzt deshalb ist jeglicher endianessabhaeniger Code auch dringend zu vermeiden!
Erst wenn Du das beherrschst kannst Du es auch anders machen ;-)
Wie würde man ihn ansatzweise vermeiden?
Zuletzt noch: bitte beschaeftige Dich mal ausfuehrlich mit Pointern. Das muss im Schlaf sitzen, wenn Du Dich naeher mit C beschaeftigen moechtest.
Das ist klar. Mit Pointern kenne ich mich auch eigentlich relativ gut aus, aber offensichtlich wurde die Thematik, einen Zeiger auf einen umgewandelten Typ, von meinem Buch entweder irgendwie verschluckt, oder ich habe die Beschreibung bisher nicht gefunden, was ich aber nicht glaube.
Markus.
http://www.apostrophitis.at
Wenn ich ein toller Programmierer währe, könnte ich vieleicht sogar Packete nach einem gewissen Standart kompelieren...
Vieleicht progge ich aber auch eine tolle Gallerie, die dann hoffentlich funzt.