Autor Beitrag
DerKrasseHans
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Fr 28.03.03 01:21 
Ich beschäftige mich zur Zeit mit Grafik-Effekten und der Programmierung solcher sowohl in der GDI (mit TBitmap) als auch in DirectX (mit Surfaces). Und die Frage, die sich mir immer wieder aufdrängt, ist, warum die Schlau-Füchse von Microsoft in beiden API's die Bild-Speicher nicht-linear anlegen lassen. Bei DirectX sind es die Pitches, die man nach jeder Zeile auf die Offsets draufaddieren muss. Bei der TBitmap hab ich keine Regelmäßigkeit für die Vergabe der ScanLine-Pointer feststellen können. Also meine Frage: Wozu das ganze? Warum Speicher kompliziert aufdröseln, wenn man sie soch einfach schön geordnet in einer Linie haben könnte???
OregonGhost
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: Fr 28.03.03 16:30 
In Direct3D ist das treiberabhängig. In dem Bereich zwischen dem letzten Pixel einer Zeile und dem Pitch bzw. Stride befindet sich ein Cache, oder einfach nur Padding-Bytes, die die Grafikkarte fordert. An diese Hardwareanforderungen muss sich auch Microsoft halten.
Bei GDI-Bitmaps müssen die Zeilen nach 32-Bit-Grenzen ausgerichtet sein. Das hängt damit zusammen, dass eine CPU immer 32 Bit liest (jedenfalls die 32-Bit-CPUs (c; ). Daher ist in vielen Fällen ein 32-Bit-Format auch schneller zu bearbeiten als ein 24-Bit-Format, denn bei letzterem muss man unter Umständen bis zu 64 Bit lesen und wilde Bitverschiebungen durchführen ("Aufdröselung" (c; ), um einen Pixel zu bekommen.

Ich weiß nicht, ob du das so meinst, aber nochmal zur Sicherheit: Der Pitch ist der Abstand zwischen den Anfängen zweier aufeinanderfolgenden Zeilen, also die Differenz in Bytes zwischen den Zeigern auf die Zeilen. Wenn du drüber nachdenkst, kommst du drauf, das es keinen Unterschied machst, ob du einen Pixel so:
pixel = array[y*Width+x]
oder so:
pixel = array[y*Stride+x]
addressierst. "Aufdröselung" ist also etwas übertrieben ;c)

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
DerKrasseHans Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Fr 28.03.03 21:41 
jau, danke, das wollte ich wissen!