Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik

Treiber für die Grafikkarte. Mehr ...

#include <device/graphics.h>

Klassendiagramm für Graphics:

Öffentliche Methoden

 Graphics (unsigned size, void *frontbuffer, void *backbuffer)
 Konstruktor; bekommt zwei Puffer im Hauptspeicher als Parameter. Mehr ...
 
bool init (bool force=false)
 Initialisiere auf aktuellen Modus. Mehr ...
 
bool switch_buffers ()
 Tauscht Frontbuffer und Backbuffer aus (sofern der Frontbuffer bereits gezeichnet wurde) Mehr ...
 
void scanout_frontbuffer ()
 Kopiert den aktuellen Frontbuffer in den Speicher der Grafikkarte. Mehr ...
 
void clear ()
 Setzt sämtliche Pixel im aktuellen Puffer auf schwarz. Mehr ...
 
bool valid (const Point &p)
 Prüfen ob ein Punkt bei der aktuellen Auflösung angezeigt werden kann. Mehr ...
 
unsigned height ()
 Anzahl der vertikalen Pixel in der aktuellen Auflösung. Mehr ...
 
unsigned width ()
 Anzahl der horizontalen Pixel in der aktuellen Auflösung. Mehr ...
 
void pixel (const Point &p, const Color &color)
 Zeichnet einen Pixel an Punkt p. Mehr ...
 
void line (const Point &start, const Point &end, const Color &color)
 Zeichnet eine Linie von start nach end. Mehr ...
 
void rectangle (const Point &top_left, const Point &bottom_right, const Color &color, bool filled=true)
 Zeichnet ein Rechteck. Mehr ...
 
void font (const Font &new_font)
 Ändern der Schriftart für Textausgabe im Grafikmodus. Mehr ...
 
void text (const Point &p, const char *string, unsigned len, const Color &color, const Font *font=nullptr)
 Ausgabe von Text an der Position pos (ohne automatischen Zeilenumbruch) Mehr ...
 
void image (const Point &p, PNG &image, unsigned width=-1, unsigned height=-1, unsigned offset_x=0, unsigned offset_y=0)
 Ausgabe eines PNG Bild[auschnitt]es. Mehr ...
 
void image (const Point &p, const GIMP &image, unsigned width=-1, unsigned height=-1, unsigned offset_x=0, unsigned offset_y=0)
 Ausgabe eines mit GIMP erzeugten Bild[auschnitt]es TEXT Gibt eine Spritebitmap aus, und überblendet sie mit Hilfe von Alpha-blending anhand des Alpha-Kanals mit dem schon im Framebuffer vorhanden Hintergrund. Das Layout eines Pixels ist RGBA. Funktioniert bis jetzt nur in 24/32bpp Modi. In GIMP lassen sich Bitmaps als C-Source exportieren. Diese kann mann dann hiermit verwenden. Mehr ...
 
void image (const Point &p, const Color *image, unsigned width, unsigned height, unsigned offset_x=0, unsigned offset_y=0)
 Ausgabe eines farbigen Sprites. Mehr ...
 
void image (const Point &p, const ColorAlpha *image, unsigned width, unsigned height, unsigned offset_x=0, unsigned offset_y=0)
 Ausgabe eines farbigen Sprites mit Alpha-Blending. Mehr ...
 

Ausführliche Beschreibung

Treiber für die Grafikkarte.

: Modus muss via multiboot gesetzt werden (beschreibung) Erweitert VESAScreen um die beiden Methoden switch_buffers() und scanout_frontbuffer(). Mit deren Hilfe ist es möglich eine Art Triplebuffering "per Hand" zu implementieren. Da diese beiden Methoden unter gegenseitigem Ausschluss ausgeführt werden müssen (während scanout_frontbuffer läuft, soll nicht der Puffer umgeschaltet werden) sind sie entweder in der guarded Variante oder im Epilog zu verwenden.

Die Benutzung des Graphikmodus sieht dann grob ungefähr so aus:

while(true) {
//Puffer mit Inhalt füllen
//Umschalten mit switch_buffers()
}

Den Aufruf von scanout_frontbuffer kann man nun auf zwei Arten durchführen. Zum einen ist es möglich ihn einfach die Schleife zu integrieren. Es ist aber auch möglich den Puffer mit einer festen Frequenz neu zu befüllen. Dazu ruft man scanout_frontbuffer sinnigerweise im Epilog des Timers auf.

Beschreibung der Konstruktoren und Destruktoren

◆ Graphics()

Graphics::Graphics ( unsigned  size,
void *  frontbuffer,
void *  backbuffer 
)

Konstruktor; bekommt zwei Puffer im Hauptspeicher als Parameter.

Parameter
sizeGröße eines Puffers
frontbufferSpeicher mit ausreichender Größe für die übertragung an den Bildschirmspeicher
backbufferSpeicher mit ausreichender Größe für das Vorbereitende Zeichnen für den Bildschirmspeicher

Dokumentation der Elementfunktionen

◆ clear()

void Graphics::clear ( )
inline

Setzt sämtliche Pixel im aktuellen Puffer auf schwarz.

◆ font()

void Graphics::font ( const Font new_font)
inline

Ändern der Schriftart für Textausgabe im Grafikmodus.

Parameter
new_fontSchriftart, die bei nachfolgenden Aufrufen von print_text verwendet werden soll.

◆ height()

unsigned Graphics::height ( )
inline

Anzahl der vertikalen Pixel in der aktuellen Auflösung.

Rückgabe
Höhe der Anzeige

◆ image() [1/4]

void Graphics::image ( const Point p,
PNG image,
unsigned  width = -1,
unsigned  height = -1,
unsigned  offset_x = 0,
unsigned  offset_y = 0 
)
inline

Ausgabe eines PNG Bild[auschnitt]es.

Gibt eine Spritebitmap aus, und überblendet sie mit Hilfe von Alpha-blending anhand des Alpha-Kanals mit dem schon im Framebuffer vorhanden Hintergrund. Das Layout eines Pixels ist RGBA. Funktioniert bis jetzt nur in 24/32bpp Modi. In GIMP lassen sich Bitmaps als C-Source exportieren. Diese kann mann dann hiermit verwenden.

Parameter
pLinke, obere Ecke des Sprites auf den Bildschirm
imageSprite als PNG Objekt
widthBreite des Sprites (automatisch ganze Breite, falls keine Angabe)
heightHöhe des Sprites (automatisch ganze Höhe, falls keine Angabe)
offset_xAbsatz rechts (keiner per Default)
offset_yAbsatz oben (keiner per Default)

◆ image() [2/4]

void Graphics::image ( const Point p,
const GIMP image,
unsigned  width = -1,
unsigned  height = -1,
unsigned  offset_x = 0,
unsigned  offset_y = 0 
)
inline

Ausgabe eines mit GIMP erzeugten Bild[auschnitt]es TEXT Gibt eine Spritebitmap aus, und überblendet sie mit Hilfe von Alpha-blending anhand des Alpha-Kanals mit dem schon im Framebuffer vorhanden Hintergrund. Das Layout eines Pixels ist RGBA. Funktioniert bis jetzt nur in 24/32bpp Modi. In GIMP lassen sich Bitmaps als C-Source exportieren. Diese kann mann dann hiermit verwenden.

Parameter
pLinke, obere Ecke des Sprites auf den Bildschirm
imageSprite als PNG Objekt
widthBreite des Sprites (automatisch ganze Breite, falls keine Angabe)
heightHöhe des Sprites (automatisch ganze Höhe, falls keine Angabe)
offset_xAbsatz rechts (keiner per Default)
offset_yAbsatz oben (keiner per Default)

◆ image() [3/4]

void Graphics::image ( const Point p,
const Color image,
unsigned  width,
unsigned  height,
unsigned  offset_x = 0,
unsigned  offset_y = 0 
)
inline

Ausgabe eines farbigen Sprites.

Gibt eine Spritebitmap ohne Transparenz aus (d.h. es übermalt den bestehenden Hintergrund). Das Layout eines Pixels ist RGBA funktioniert bis jetzt nur in 24/32bpp Modi. In GIMP lassen sich Bitmaps als C-Source exportieren. Diese kann mann dann hiermit verwenden.

Parameter
pLinke, obere Ecke des Sprites auf den Bildschirm
imageZeiger auf die Binärdaten des Sprites
widthBreite des Sprites
heightHöhe des Sprites
offset_xAbsatz rechts (keiner per Default)
offset_yAbsatz oben (keiner per Default)

◆ image() [4/4]

void Graphics::image ( const Point p,
const ColorAlpha image,
unsigned  width,
unsigned  height,
unsigned  offset_x = 0,
unsigned  offset_y = 0 
)
inline

Ausgabe eines farbigen Sprites mit Alpha-Blending.

Gibt eine Spritebitmap aus, und überblendet sie mit Hilfe von Alpha-blending anhand des Alpha-Kanals mit dem schon im Framebuffer vorhanden Hintergrund. Das Layout eines Pixels ist RGBA. Funktioniert bis jetzt nur in 24/32bpp Modi. In GIMP lassen sich Bitmaps als C-Source exportieren. Diese kann mann dann hiermit verwenden.

Parameter
pLinke, obere Ecke des Sprites auf den Bildschirm
imageZeiger auf die Binärdaten des Sprites
widthBreite des Sprites
heightHöhe des Sprites
offset_xAbsatz rechts (keiner per Default)
offset_yAbsatz oben (keiner per Default)

◆ init()

bool Graphics::init ( bool  force = false)

Initialisiere auf aktuellen Modus.

Parameter
forceVerwende den Grafikmodus auch wenn Attribute behaupten er sei nicht verfügbar (auf den Testrechnern notwendig)
Rückgabe
'true' falls der Modus gefunden wurde.

◆ line()

void Graphics::line ( const Point start,
const Point end,
const Color color 
)
inline

Zeichnet eine Linie von start nach end.

Parameter
startStartpunkt der Linie
endEndpunkt der Linie
colorFarbe, in der die Linie gezeichnet werden soll

◆ pixel()

void Graphics::pixel ( const Point p,
const Color color 
)
inline

Zeichnet einen Pixel an Punkt p.

Parameter
pPosition des Pixels
colorFarbe, in der der Punkt gezeichnet werden soll

◆ rectangle()

void Graphics::rectangle ( const Point top_left,
const Point bottom_right,
const Color color,
bool  filled = true 
)
inline

Zeichnet ein Rechteck.

Parameter
top_leftObere, linke Ecke des Rechtecks
bottom_rightUntere, rechte Ecke des Rechtecks
colorFarbe, in der das Rechteck gezeichnet werden soll
filledGibt an, ob das Rechteck gefüllt gezeichnet werden soll, oder nur als Rahmen

◆ scanout_frontbuffer()

void Graphics::scanout_frontbuffer ( )

Kopiert den aktuellen Frontbuffer in den Speicher der Grafikkarte.

◆ switch_buffers()

bool Graphics::switch_buffers ( )

Tauscht Frontbuffer und Backbuffer aus (sofern der Frontbuffer bereits gezeichnet wurde)

Zeichenoperationen über die Methoden von VESAScreen gehen in den aktuellen Backbuffer; scanout_frontbuffer kopiert den aktuellen Frontbuffer in den Speicher der Grafikkarte.

Rückgabe
true wenn der vorherige Frontbuffer in den Speicher der Graphikkarte übergeben wurde wurde

◆ text()

void Graphics::text ( const Point p,
const char *  string,
unsigned  len,
const Color color,
const Font font = nullptr 
)
inline

Ausgabe von Text an der Position pos (ohne automatischen Zeilenumbruch)

Parameter
pPosition, an der der String angezeigt werden soll
stringZeiger auf den String, der ausgegeben werden soll
lenLänge des auszugebenden Strings
colorFarbe, in der der String ausgegeben werden soll
fontSchriftart für die Darstellung (oder nullptr für Standardschriftart)

◆ valid()

bool Graphics::valid ( const Point p)
inline

Prüfen ob ein Punkt bei der aktuellen Auflösung angezeigt werden kann.

Parameter
pzu prüfender Punkt
Rückgabe
'true' falls darstellbar

◆ width()

unsigned Graphics::width ( )
inline

Anzahl der horizontalen Pixel in der aktuellen Auflösung.

Rückgabe
Breite der Anzeige

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: