Hallo Markus,
In der letzten for Schleife werden ständig Bits verschoben, aber in welchen Bereichen, speziell bei Grafiken, wendet man so etwas an, und was tun diese Verschiebungen?
ich habe mir jetzt nicht die Mühe gemacht, den Codeausschnitt komplett zu analysieren, dazu fehlt mir auch einiges an Kontext.
Aber ich sehe hier eigentlich nur zwei Stellen, wo Bitverschiebungen angewendet werden.
ai = (a1-a0) >>3;
zi = (z1-z0) >>3;
Das sieht so aus, als stünde die Verschiebung um 3 Bit hier tatsächlich für eine Division durch 2³=8. Sieht also nach einer arithmetischen Anwendung aus, nichts Mystisches.
Die zweite Stelle ist noch offensichtlicher, vor allem wenn man sie ein wenig "säubert".
* ( tmp++ ) = * ( texture1 +
( ((a>>8)&255) |
((z) & (255<<8))
)
) ;
Da putzen wir ein paar Klammern und Leerzeichen weg, die es in diesem Fall nur unübersichtlicher machen. Außerdem ersetzen wir die Konstanten durch ihre hexadezimale Darstellung, dann wird schon ziemlich klar, was hier gemeint ist.
*(tmp++) = *(texture1 + ( ((a>>8) & 0x00FF) | (z & 0xFF00) ) );
Da berechnet jemand einen Offset (a.k.a. Index) auf einen Zeiger. Und die Bitschieberei inklusive Maskierung bedeutet hier:
MSB(Offset) = MSB(z);
LSB(Offset) = MSB(a);
Wie gesagt: Was das ganze im Zusammenhang wirklich bedeutet, kann ich dir nicht sagen, ohne diesen Zusammenhang (vor allem die zugrundeliegenden Datenstrukturen) zu kennen.
So long,
Martin