Farbpuffer

Aus DGL Wiki
Wechseln zu: Navigation, Suche


Was ist der Farbpuffer?

Der Farbpuffer enthält die Farbinformationen der einzelnen Fragmente im Framebuffer. Gespeichert werden dazu je nach Modus entweder Indizes auf Paletteneinträgte (Index-Modus) oder Intensitäts-Werte der Pufferkomponenten (RGB(A)-Modus).


Aufbau

RGBA-Modus

Hat man einen Renderkontext mit mehr als 8-Bit Farbwerten (8-Bit = 256 Farben = Indexmodus) angefordert, bekommt man von OpenGL einen sog. RGBA-Farbpuffer (R=Rot, G=Grün, B=Blau, A=Alpha) zur verfügung gestellt. Der Farbpuffer besteht dann aus insgesamt 4 unabhängigen Puffern für jede RGBA-Komponente, deren Bit-Tiefe von der gewählten Farbtiefe abhängt. Im Normalfall (32-Bit Farbtiefe, 24 Bit für R+G+B und 8 Bit für A) besitzt jeder dieser Komponentenpuffer 8 Bitflächen, in denen die Intensität der entsprechenden Komponente als Ganzzahlwert abgelegt wird. Die Intensität reicht dabei von 0 (entspricht 0/255) bis 255 (entspricht 1.0, also volle Intensität). Die Alpha-Komponente kann mittels Blending/Alphamasking für verschiedene Transparenz-Effekte verwendet werden.

Wenn man sich unter Windows ein Pixelformat besorgt, werden die Bits aus cColorBits auf Rot, Grün und Blau verteilt. Der Wert von cAlphaBits gibt dagegen die Bits für den Alpha Kanal an.

Index-Modus

Dieser Modus wird heute nur noch sehr selten verwendet, denn 256-Palettenfarben sind inzwischen einfach viel zu wenig, aber mehr war damals aufgrund eingeschränkter Hardware einfach nicht machbar. In diesem Modus gibt man (im Normalfall beim Programmstart) eine Farbpalette an, in der sich alle benötigten Farbwerte befinden. Jeder dieser Farbwerte besitzt eine eindeutige Nummer, den Index. OpenGL schreibt in diesem Modus dann nicht die Intensität der Farbkomponente in den Farbpuffer, sondern einfach nur den Index dieser Farbe, so dass diese später referenziert werden kann.


Wichtige Funktionen

Wie auch die anderen Buffer kann der Colorbuffer über die Funktion glClear und dem Parameter GL_COLOR_BUFFER_BIT mit einem Wert gefüllt werden. Dieser Farbwert wird mit Hilfe der Funktion glClearColor definiert. Farbwerte für einzelne Eckpunkte übergibt man mittels glColor.


Siehe auch

Tiefenpuffer, Schablonenpuffer, Akkumulationspuffer