RGBA Farbeberechnen DirectX7
-
Hallo in der Doku vom DirectX7 stehen ein paar Makros um RGBA-Werte umzurechnen ect.
z.B.
RGB_GETGREEN(rgb) (((rgb) >> & 0xff)
RGBA_MAKE(r, g, b, a)\((D3DCOLOR) (((a) << 24) | ((r) << 16) | ((g) << | (b)))
Ich habe doch mal gelesen das man keine Makros verwenden soll. Ich habe jetzt eine Funktion gebaut die 16Bit RGB werte auf 555 und 565 Grafikkarten richtig umrechnet. wie ist es mit RGBA-Werten und was ändert sich bei 32Bit?
-
Ich weiß zwar net, warum man keine Makros verwenden sollte, aber wenn du es mit Funktionen machst, sollten diese wohl auf jeden Fall inline sein
wie ist es mit RGBA-Werten und was ändert sich bei 32Bit?
Was genau meinst du? Du musst dir halt einfach den Wert anders errechnen (bei 32bit brauchst du dann halt soviel ich weiß nur bitshifts)
-
Ich weiß zwar net, warum man keine Makros verwenden sollte.
Wenn das Format der Grafikkarte 555 hat und du benutzt ein Makro für 565 (bei 16Bit) kommt es zu Farbverzerrungen.
Stell dir vor du definierst Grün als Colorkey (0,255,0) Das Makro rechnet es falsch um und das Colrokey funktioniert nicht. Habe ich schon oft bei Anfänger-Spielen gesehen.
-
Klar, du musst schon das richtige Makro verwenden
-
Das richtig Umrechnen von 16Bit RGB-Werten macht mir keine Probleme. Ich wüsste gerne wie es bei RGBA aussieht.
-
Wo genau ist denn dein Problem? Du hast doch oben schon ein RGBA-Makro gepostet
-
Original erstellt von flenders:
Ich weiß zwar net, warum man keine Makros verwenden sollte, aber wenn du es mit Funktionen machst, sollten diese wohl auf jeden Fall inline seinMakros sind in solchen Fällen einfach nicht sinnvoll, was bietet ein Makro hierbei gegenüber einer richtigen Fkt. für Vorteile?
-
Kann mir das einer mit den 16Bit und Alpha erklären?
Ich mach jetzt eine Funktion die feststllt welches Format die Garfikkarte unterstützt. Doch wie läuft es ab mit den Alpha-Wert?
Und warum benutzt die DirectX Doku Makros?
-
Weil es in C keine Inline-Funktionen gibt (nur in C++) und normale Funktionen langsamer als ein Makro sind!
Wo ist denn dein Problem mit dem Alpha-Wert? Ist doch auch nicht anders, als mit den RGB-Werten?! Du hast halt z.B. A555 (1bit alpha) oder A444 (4bit alpha) und du musst dir halt wie bei den RGB Werten den Alphawert richtig shiften und maskieren, oder wie das auch immer heißt
-
Original erstellt von flenders:
Weil es in C keine Inline-Funktionen gibt (nur in C++)Ach was, das Schlüsselwort inline gibts (zumindest seit C99) auch in C, aber auch davor beherrschten die meisten optimierenden Compiler Funktions-Inlining schon mehr oder weniger gut.
edit: Und selbst wenn das nicht der Fall gewesen wäre: Funktionsaufrufe sind in C(++) ausgesprochen billig, da ist mir ein bisschen Overhead lieber als lange und mühsame Fehlersuche wegen irgendwelchen Makros...
[ Dieser Beitrag wurde am 02.03.2003 um 21:49 Uhr von nman editiert. ]
-
In der FAQ gibts irgendwo eine universelle Fkt. zur Umrechnung. Allerdings ist die nicht auf Speed getrimmt, den braucht man normalerweise bei so einer einzelnen Umrechnungsaktion nicht, da man sowas garnicht erst in Echtzeit machen sollte. Wenn man's doch unbedingt braucht, sollte man für jede Farbtiefe extra optimieren.
Bye, TGGC