Nachdem wir uns in den letzten Artikeln mit evolutionären Algorithmen und künstlichen Neuronalen Netzen beschäftigt haben, soll es heute in einen ganz anderen Bereich gehen, und zwar in den de Computergrafik. Ganz konkret wollen wir uns mit der Frage beschäftigen, woher der Monitor eigentlich weiß, was er anzeigen soll, sprich: wie kommt die Grafik auf den Bildschirm?
Hardwareseitig sieht das so aus, dass ein Monitor eine Menge von Bildpunkten, die sogenannten Pixel, darstellt. Ein Pixel ist dabei ein einzelner Punkt auf dem Monitor in einer bestimmten Farbe. Die Menge der dargestellten Pixel bestimmt dabei die Auflösung des Monitors; kann dieser etwa maximal 1024 Pixel in der breite und 768 in der Höhe darstellen, so spricht man von einer Auflösung von 1024×768.
Die Farbe eines Pixel ergibt sich im Normalfall aus der Mischung der Farben Rot, Grün und Blau (dem sogenannten RGB-Farbraum); jede Farbe wird dabei durch ein einzelnes Byte (wir erinnern uns: das sind 8 Bit), also den Werten von 0 bis 255 codiert. Je höher der Anteil einer einzelnen Farbe an der Gesamtfarbe ist, desto mehr erscheint der Pixel in der entsprechenden Farbe; schwarze Pixel können durch drei 0en, weiße Pixel durch drei 255en dargestellt werden. Das Scienceblogs.de-Logo in einfachster Form, etwas farblich und in einer 10×10-Auflösung würde demzufolge in etwa so aussehen:
Die Information, welcher Pixel auf der Monitoroberfläche in welcher Farbe dargestellt werden soll, erhält der Monitor für gewöhnlich über das Monitorkabel vom Grafikchip oder der Grafikkarte des Rechners übermittelt (entweder auf analogem Weg, z.B. über den VGA-Ausgang, oder auf digitalem Weg, also etwa per DVI oder HDMI). Die interessante Frage ist nun aber, woher die Grafikkarte weiß, welche Pixelfarbe an welcher Monitorstelle gezeigt werden soll.
Wie vielen sicherlich bekannt ist, besitzen Grafikkarten oft über einen eigenen Arbeitsspeicher, zusätzlich zu dem eigenen des Rechners (und getrennt von diesem). Ein bestimmter Bereich dieses Arbeitsspeichers der Grafikkarte ist dafür reserviert, lediglich Daten zu diesem Zweck (gewissermaßen das darzustellende Bild im Arbeitsspeicher) aufzunehmen. Alle in diesem Bereich gespeicherten Pixelfarben landen (mehr oder weniger) direkt auf dem Monitor des Nutzers, indem sie von der Grafikkarte automatisch ausgelesen und an den Monitor geleitet werden. Um also die Anzeige auf dem Monitor zu ändern, also das nächste Bild darzustellen, müssen die Werte in diesem speziellen Arbeitsbereich geändert werden.Der zum obigen Bild passende Arbeitsspeicher-Bereich würde etwa für die ersten 4 Zeilen folgendermaßen aussehen; jeweils drei Byte (für die Werte Rot, Grün und Blau) repräsentieren hierbei ein Pixel, wobei man sich die Arbeitsspeicher-Zeilen eigentlich als hintereinander geschrieben vorstellen muss:
Das ganze Vorgehen hat allerdings ein kleines Problem: während ein neues Bild in den Arbeitsspeicher “gemalt” (eigentlich ja geschrieben) wird, existiert zeitweise eine unfertige Version des Bildes, da das Schreiben einige Zeit in Anspruch nimmt; im Ergebnis würde das Bild beständig flimmern, da immer wieder diese unfertigen Zwischenbilder angezeigt würden.
Die Lösung hierfür ist ebenso einfach wie elegant. Statt eines einzigen Bereiches für die grafische Ausgabe verwenden moderne Grafikkarten und -chips zwei oder mehr Bereiche dafür. Der aktuell angezeigte Bereich wird als Frontbuffer bezeichnet, der oder die nicht angezeigten Bereiche folgerichtig als Backbuffer. Ein weiterer im Speicher der Grafikkarte abgelegte Wert zeigt an, welcher Bereich gerade als Frontbuffer zu betrachten ist, indem er die Startadresse des entsprechenden Speicherbereiches enthält.
Der Backbuffer wird nun genutzt, um das als nächstes anzuzeigende Bild aufzunehmen, ohne dabei jedoch das aktuell angezeigte schon zu ändern. Während also das aktuelle Bild störungsfrei über den Frontbuffer angezeigt wird, kann in den Backbuffer bereits das nächste Bild geschrieben werden. Ist der Schreibvorgang beendet, wird einfach der Wert, welcher die Adresse des Frontbuffers anzeigt, auf die Adresse des Backbuffers gesetzt (das nennt man dann Page Flipping). Front- und Backbuffer wechseln also ihre Funktion und das soeben geschriebene Bild kann ohne Flimmern sofort angezeigt werden. Das nächste anzuzeigende Bild kann nun in den neuen Backbuffer (den vormaligen Frontbuffer) geschrieben werden, womit das Verfahren von vorne beginnt. Je nach Bedarf können auch mehrere Backbuffer zum Einsatz kommen, die parallel und zeitlich leicht versetzt geschrieben werden, so dass ein schnellerer Austausch der Front- und Backbuffer möglich ist. Kommen insgesamt 2 Buffer zum Einsatz (also ein Front- und ein Backbuffer), so spricht man vom Double Buffering; bei drei Buffern entsprechend vom Tripple Buffering. Die Rate, mit welcher der Austausch zwischen den Buffern erfolgt, bestimmt maßgeblich die sogenannte Framerate, also die Anzahl an Bildern, die pro Sekunde gezeigt werden. Je länger das vollständige Füllen eines Buffers dauert, desto langsamer können die Buffer vertauscht werden und desto geringer ist die Anzahl an Bildern, die pro Sekunde angezeigt werden.
Kommentare (8)