OOStuBS/MPStuBS
|
Abstraktion einer VESA Grafikkarte. Mehr ...
#include <vesascreen.h>
Ö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 ... | |
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.
|
inline |
Setzt sämtliche Pixel im aktuellen Puffer auf schwarz.
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.
width | Breite in Pixel des gewünschten Grafikmodus |
height | Höhe in Pixel des gewünschten Grafikmodus |
bpp | Untere 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). |
|
inline |
Ausgabe eines PNG Bild[auschnitt]es.
p | Linke, obere Ecke des Sprites auf den Bildschirm |
image | Sprite als PNG Objekt |
width | Breite des Sprites (automatisch ganze Breite, falls keine Angabe) |
height | Höhe des Sprites (automatisch ganze Höhe, falls keine Angabe) |
offset_x | Absatz rechts (keiner per Default) |
offset_y | Absatz oben (keiner per Default) |
|
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.
p | Linke, obere Ecke des Sprites auf den Bildschirm |
image | Sprite als PNG Objekt |
width | Breite des Sprites (automatisch ganze Breite, falls keine Angabe) |
height | Höhe des Sprites (automatisch ganze Höhe, falls keine Angabe) |
offset_x | Absatz rechts (keiner per Default) |
offset_y | Absatz oben (keiner per Default) |
|
inline |
Ausgabe eines farbigen Sprites.
Gibt eine Spritebitmap ohne Transparenz aus (d.h. es übermalt den bestehenden Hintergrund).
p | Linke, obere Ecke des Sprites auf den Bildschirm |
image | Zeiger auf die Binärdaten des Sprites |
width | Breite des Sprites |
height | Höhe des Sprites |
|
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.
p | Linke, obere Ecke des Sprites auf den Bildschirm |
image | Zeiger auf die Binärdaten des Sprites |
width | Breite des Sprites |
height | Höhe des Sprites |
|
inline |
Zeichnet eine Linie von start nach end.
start | Startpunkt der Linie |
end | Endpunkt der Linie |
color | Farbe, in der die Linie gezeichnet werden soll |
|
inline |
Zeichnet einen Pixel an Punkt p.
p | Position des Pixels |
color | Farbe, in der der Punkt gezeichnet werden soll |
|
inline |
Zeichnet ein Rechteck.
top_left | Obere, linke Ecke des Rechtecks |
bottom_right | Untere, rechte Ecke des Rechtecks |
color | Farbe, in der das Rechteck gezeichnet werden soll |
filled | Gibt an, ob das Rechteck gefüllt gezeichnet werden soll, oder nur als Rahmen |
|
inline |
Gibt Text an der globalen Cursorposition (analog CGA_Screen) auch mit Zeilenumbruch aus(allerdings ohne scrollen.
string | Zeiger auf den String, der ausgegeben werden soll |
len | Länge des auszugebenden Strings |
color | Farbe, in der der String ausgegeben werden soll |
|
inline |
Ausgabe von Text an der Position pos (ohne automatischen Zeilenumbruch)
string | Zeiger auf den String, der ausgegeben werden soll |
len | Länge des auszugebenden Strings |
color | Farbe, in der der String ausgegeben werden soll |
pos | Position, an der der String angezeigt werden soll |
|
inline |
Ändern der Schriftart für Textausgabe im Grafikmodus.
new_font | Schriftart, die bei nachfolgenden Aufrufen von print_text verwendet werden soll. |
bool VESAScreen::set_mode | ( | VBEModeData_t * | mode | ) |
Setzt einen vorher per find_mode ausgewählten Modus.