Entwickler-Ecke
Multimedia / Grafik - Wofür Pitch und nichtlineare Speicher?
DerKrasseHans - Fr 28.03.03 01:21
Titel: Wofür Pitch und nichtlineare Speicher?
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 - 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)
DerKrasseHans - Fr 28.03.03 21:41
jau, danke, das wollte ich wissen!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!