Direct3D: Warum eigentlich so komische Integer-Farbwerte?
-
Würde mich mal interessieren, was man damit erreichen möchte. Diese Repräsentation von Farbwerten entspricht ja nicht gerade dem, mit was die Grafikhardware intern arbeitet. Aber entweder ich übersehe da was oder die meisten Direct3D-APIs verwenden ausschließlich diese Darstellung...
-
Was meinst du jetzt damit?
Die DWORD-RGBA?
Da würd ich sagen, ist es einfach Tradition. Als D3D das Licht der Welt erblickte, so im Zeitalter zwischen Pentium1 und MMX, hat man Daten am schnellsten in DWORDs hin und hergeschubst. (Jedenfalls hab ich es damals so gelernt
)
-
Ja, das meine ich. Aber auch in Zeiten von Pentium 1 und MMX (also zu Zeiten der ersten 3D-Beschleunigerkarten) haben die Karten vermutlich in floats gerechnet und die Umwandlung kann ja wohl kaum billiger zu haben sein. Glaubst du, diese Tradition geht auf noch gruseligere Zeiten zurück?
-
Die Grafikkarten haben intern - soweit ich weiß - mit Fixed-Darstellung gerechnet. Da ist die Umwandlung sehr einfach (erfordert nur einen Bit-Shift). Floats benutzen sie erst seit kurzer Zeit (wo es nun ja auch Float-Render-Targets gibt).
Direct3D 10 verabschiedet sich übrigens davon.
Da erwartet z.B. die Clear-Methode ein float[4]-Array.Der Grund, warum man 32-Bit-Integer genommen hat, ist - denke ich mal - ganz einfach der, dass der Frame-Buffer auch maximal nur 32 Bits pro Pixel ermöglichte. Und außerdem macht es auch in einem Vertex-Buffer oder einer Textur viel Unterschied, ob man 32 Bits oder 128 Bits für eine Farbangabe opfern will.
-
Ahja ok, danke.