OOStuBS/MPStuBS
VESAScreen Klassenreferenz

Abstraktion einer VESA Grafikkarte. Mehr ...

#include <vesascreen.h>

Klassendiagramm für VESAScreen:

Öffentliche Methoden

void init ()
 Initialisiert das Grafiksubsystem; Aufruf am besten in der Main-Funktion.
 
VBEModeData_t * find_mode (unsigned int width, unsigned int height, unsigned char bpp)
 Sucht einen Modus aus der Modustabelle. Mehr ...
 
bool set_mode (VBEModeData_t *mode)
 Setzt einen vorher per find_mode ausgewählten Modus. Mehr ...
 
void clear_screen ()
 Setzt sämtliche Pixel im aktuellen Puffer auf schwarz. Mehr ...
 
void print_pixel (const Point &p, const Color &color)
 Zeichnet einen Pixel an Punkt p. Mehr ...
 
void print_line (const Point &start, const Point &end, const Color &color)
 Zeichnet eine Linie von start nach end. Mehr ...
 
void print_rectangle (const Point &top_left, const Point &bottom_right, const Color &color, bool filled=true)
 Zeichnet ein Rechteck. Mehr ...
 
void set_font (const Font &new_font)
 Ändern der Schriftart für Textausgabe im Grafikmodus. Mehr ...
 
void print_text (char *string, int len, const Color &color)
 Gibt Text an der globalen Cursorposition (analog CGA_Screen) auch mit Zeilenumbruch aus(allerdings ohne scrollen. Mehr ...
 
void print_text (char *string, int len, const Color &color, const Point &pos)
 Ausgabe von Text an der Position pos (ohne automatischen Zeilenumbruch) Mehr ...
 
void print_image (const Point &p, PNG &image, unsigned width=0, unsigned height=0, unsigned offset_x=0, unsigned offset_y=0)
 Ausgabe eines PNG Bild[auschnitt]es. Mehr ...
 
void print_image (const Point &p, const GIMP &image, unsigned width=0, unsigned height=0, unsigned offset_x=0, unsigned offset_y=0)
 Ausgabe eines mit GIMP erzeugten 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. Mehr ...
 
void print_image (const Point &p, const SpritePixelRGB8 *image, unsigned width, unsigned height)
 Ausgabe eines farbigen Sprites. Mehr ...
 
void print_image (const Point &p, const SpritePixelRGBA8 *image, unsigned width, unsigned height)
 Ausgabe eines farbigen Sprites mit Alpha-Blending. Mehr ...
 

Ausführliche Beschreibung

Abstraktion einer VESA Grafikkarte.

Die Klasse VESAScreen bietet die Möglichkeit VESA Grafikmodi zu setzen. In diesen kann man dann direkt den in den Adressraum gemappten Framebuffer schreiben. Die Klasse GraphicsPrinter wird dann dazu verwendet, um einige primitive Zeichenoperationen durchführen zu können.

Die Verwendung sieht folgendermassen aus: Zuerst muss die Methode VESAScreen::init() aufgerufen werden, um Informationen, über die von der Grafikkarte unterstützen Modi zu erhalten. Danach kann man mit VESAScreen::find_mode() nach einem geeigneten Modus suchen. (Je nach Grafikkarte kann es auch passieren, dass kein passender Modus gefunden wird). Mit Aufruf von VESAScreen::set_mode() kann man dann den vorher gefundenen Modus setzen. Wenn ihr eine Übersicht über die von der aktuellen Grafikkarte unterstützen Modi haben wollt, dann ruft einfach VESAScreen::init() auf, ohne dann nachher in den Grafikmodus umzuschalten.

Dokumentation der Elementfunktionen

◆ clear_screen()

void VESAScreen::clear_screen ( )
inline

Setzt sämtliche Pixel im aktuellen Puffer auf schwarz.

◆ find_mode()

VBEModeData_t * VESAScreen::find_mode ( unsigned int  width,
unsigned int  height,
unsigned char  bpp 
)

Sucht einen Modus aus der Modustabelle.

Nachdem init() ausgeführt wurde, kann man die von der Grafikkarte unterstützten Modi nach gewissen Kriterien durchsuchen, um einen geeigneten Modus zu finden.

Parameter
widthBreite in Pixel des gewünschten Grafikmodus
heightHöhe in Pixel des gewünschten Grafikmodus
bppUntere Schranke für die Farbtiefe des gewünschten Grafikmodus (Achtung: qemu kann kein 32bpp, sondern nur 24bpp, bei den Testrechnern ist dies genau invers(32bpp aber kein 24bpp).
Rückgabe
Modus, der am Besten zu den gewählten Parametern passt.

◆ print_image() [1/4]

void VESAScreen::print_image ( const Point &  p,
PNG &  image,
unsigned  width = 0,
unsigned  height = 0,
unsigned  offset_x = 0,
unsigned  offset_y = 0 
)
inline

Ausgabe eines PNG Bild[auschnitt]es.

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)

◆ print_image() [2/4]

void VESAScreen::print_image ( const Point &  p,
const GIMP &  image,
unsigned  width = 0,
unsigned  height = 0,
unsigned  offset_x = 0,
unsigned  offset_y = 0 
)
inline

Ausgabe eines mit GIMP erzeugten 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)

◆ print_image() [3/4]

void VESAScreen::print_image ( const Point &  p,
const SpritePixelRGB8 *  image,
unsigned  width,
unsigned  height 
)
inline

Ausgabe eines farbigen Sprites.

Gibt eine Spritebitmap ohne Transparenz aus (d.h. es übermalt den bestehenden Hintergrund).

Parameter
pLinke, obere Ecke des Sprites auf den Bildschirm
imageZeiger auf die Binärdaten des Sprites
widthBreite des Sprites
heightHöhe des Sprites

◆ print_image() [4/4]

void VESAScreen::print_image ( const Point &  p,
const SpritePixelRGBA8 *  image,
unsigned  width,
unsigned  height 
)
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.

Parameter
pLinke, obere Ecke des Sprites auf den Bildschirm
imageZeiger auf die Binärdaten des Sprites
widthBreite des Sprites
heightHöhe des Sprites

◆ print_line()

void VESAScreen::print_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

◆ print_pixel()

void VESAScreen::print_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

◆ print_rectangle()

void VESAScreen::print_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

◆ print_text() [1/2]

void VESAScreen::print_text ( char *  string,
int  len,
const Color &  color 
)
inline

Gibt Text an der globalen Cursorposition (analog CGA_Screen) auch mit Zeilenumbruch aus(allerdings ohne scrollen.

Parameter
stringZeiger auf den String, der ausgegeben werden soll
lenLänge des auszugebenden Strings
colorFarbe, in der der String ausgegeben werden soll

◆ print_text() [2/2]

void VESAScreen::print_text ( char *  string,
int  len,
const Color &  color,
const Point &  pos 
)
inline

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

Parameter
stringZeiger auf den String, der ausgegeben werden soll
lenLänge des auszugebenden Strings
colorFarbe, in der der String ausgegeben werden soll
posPosition, an der der String angezeigt werden soll

◆ set_font()

void VESAScreen::set_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.

◆ set_mode()

bool VESAScreen::set_mode ( VBEModeData_t *  mode)

Setzt einen vorher per find_mode ausgewählten Modus.

Rückgabe
Zeiger auf den Modusdeskriptor

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