GitOS
Loading...
Searching...
No Matches
vbe_graphics.hpp
Go to the documentation of this file.
1//
2// Created by Pawel Reich on 1/23/25.
3//
4
5#pragma once
6#include <stdint.h>
8
10
11class VBEGraphics : public Graphics
12{
13 public:
14 static Graphics* the();
15
16 virtual void draw_pixel(uint32_t x, uint32_t y, uint32_t color);
17
18 virtual void draw_char(uint32_t x, uint32_t y, char c, uint32_t color);
19
20 virtual void draw_string(uint32_t x, uint32_t y, const char* str, uint32_t color);
21
22 virtual void print_char(char c);
23
24 virtual void print_char_color(char c, TEXT_MODE_COLOR color);
25
26 virtual void print_string(const char* str);
27 virtual void print_string_color(const char* str, TEXT_MODE_COLOR color);
28
29 virtual void clear_screen();
30
31 virtual void set_cursor(uint32_t x, uint32_t y);
32 virtual uint32_t get_cursor_x();
33 virtual uint32_t get_cursor_y();
35 virtual void set_text_color(TEXT_MODE_COLOR color);
36
37 void scroll_screen(int i);
38 bool is_vbe() const;
39
40 uint32_t get_rrggbb_color(TEXT_MODE_COLOR color);
41 uint32_t get_framebuffer_size() const;
42 uint32_t get_bpp() const;
43 uint32_t get_height() const;
44 uint32_t get_width() const;
45 uint8_t* get_framebuffer() const;
46
47 void setup(uint8_t* framebuffer, uint32_t bpp, uint32_t width, uint32_t height);
48 void mount_fb();
49
50 private:
51 uint8_t* FRAMEBUFFER;
52 uint32_t WIDTH;
53 uint32_t HEIGHT;
54 uint32_t BPP;
55 uint32_t PITCH;
56
57 bool m_setup = false;
58
59 MemoryFS* m_memoryfs;
60
61 const uint32_t FONT_SCALE = 1;
62
63 uint32_t current_x = 0, current_y = 0;
64 TEXT_MODE_COLOR current_color = WHITE;
65
66 const uint8_t font[128][8] = {
67 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000 }, // ASCII 0x20
68 { 0b00000000, 0b00000000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00000000, 0b00100000 }, // ASCII 0x21
69 { 0b00000000, 0b00000000, 0b01010000, 0b01010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000 }, // ASCII 0x22
70 { 0b00000000, 0b00110000, 0b01010000, 0b11111000, 0b01010000, 0b11111000, 0b01100000, 0b10100000 }, // ASCII 0x23
71 { 0b00000000, 0b00000000, 0b00100000, 0b11111000, 0b10100000, 0b01110000, 0b00101000, 0b11111000 }, // ASCII 0x24
72 { 0b00000000, 0b00000000, 0b11100000, 0b10100000, 0b11110000, 0b01111000, 0b00101000, 0b00111000 }, // ASCII 0x25
73 { 0b00000000, 0b00000000, 0b00111000, 0b00100000, 0b00110000, 0b01011000, 0b01010000, 0b00111000 }, // ASCII 0x26
74 { 0b00000000, 0b00000000, 0b00100000, 0b00100000, 0b00000000, 0b00000000, 0b00000000, 0b00000000 }, // ASCII 0x27
75 { 0b00000000, 0b00010000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00010000 }, // ASCII 0x28
76 { 0b00000000, 0b01000000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01000000 }, // ASCII 0x29
77 { 0b00000000, 0b00000000, 0b10101000, 0b01110000, 0b01110000, 0b10101000, 0b00000000, 0b00000000 }, // ASCII 0x2A
78 { 0b00000000, 0b00000000, 0b00000000, 0b00100000, 0b00100000, 0b11111000, 0b00100000, 0b00100000 }, // ASCII 0x2B
79 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100000 }, // ASCII 0x2C
80 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100000, 0b00000000, 0b00000000 }, // ASCII 0x2D
81 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100000 }, // ASCII 0x2E
82 { 0b00000000, 0b00000000, 0b00010000, 0b00100000, 0b00100000, 0b01100000, 0b01000000, 0b01000000 }, // ASCII 0x2F
83 { 0b00000000, 0b00000000, 0b00110000, 0b01001000, 0b01101000, 0b01001000, 0b01001000, 0b00110000 }, // ASCII 0x30
84 { 0b00000000, 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000 }, // ASCII 0x31
85 { 0b00000000, 0b00000000, 0b01110000, 0b00001000, 0b00001000, 0b00010000, 0b00100000, 0b01111000 }, // ASCII 0x32
86 { 0b00000000, 0b00000000, 0b01110000, 0b00001000, 0b00001000, 0b00110000, 0b00001000, 0b01111000 }, // ASCII 0x33
87 { 0b00000000, 0b00000000, 0b00010000, 0b00110000, 0b00110000, 0b01010000, 0b01111000, 0b00010000 }, // ASCII 0x34
88 { 0b00000000, 0b00000000, 0b01111000, 0b01000000, 0b01110000, 0b00001000, 0b00001000, 0b01110000 }, // ASCII 0x35
89 { 0b00000000, 0b00000000, 0b00111000, 0b01100000, 0b01000000, 0b01111000, 0b01001000, 0b00111000 }, // ASCII 0x36
90 { 0b00000000, 0b00000000, 0b01111000, 0b00001000, 0b00010000, 0b00010000, 0b00010000, 0b00100000 }, // ASCII 0x37
91 { 0b00000000, 0b00000000, 0b00110000, 0b01001000, 0b01001000, 0b00110000, 0b01001000, 0b01111000 }, // ASCII 0x38
92 { 0b00000000, 0b00000000, 0b01110000, 0b01001000, 0b01111000, 0b00001000, 0b00011000, 0b01110000 }, // ASCII 0x39
93 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100000, 0b00000000, 0b00000000, 0b00100000 }, // ASCII 0x3A
94 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100000, 0b00000000, 0b00000000, 0b00100000 }, // ASCII 0x3B
95 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b01110000, 0b01100000, 0b00011000 }, // ASCII 0x3C
96 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11110000, 0b00000000, 0b11110000, 0b00000000 }, // ASCII 0x3D
97 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000000, 0b00111000, 0b00011000, 0b01100000 }, // ASCII 0x3E
98 { 0b00000000, 0b00000000, 0b01110000, 0b00110000, 0b00100000, 0b00100000, 0b00000000, 0b00100000 }, // ASCII 0x3F
99 { 0b00000000, 0b00000000, 0b00000000, 0b00110000, 0b01001000, 0b01011000, 0b01011000, 0b01000000 }, // ASCII 0x40
100 { 0b00000000, 0b00000000, 0b00110000, 0b00110000, 0b00110000, 0b00110000, 0b01111000, 0b01001000 }, // ASCII 0x41
101 { 0b00000000, 0b00000000, 0b01110000, 0b01001000, 0b01001000, 0b01110000, 0b01001000, 0b01111000 }, // ASCII 0x42
102 { 0b00000000, 0b00000000, 0b00111000, 0b01000000, 0b01000000, 0b01000000, 0b01000000, 0b00111000 }, // ASCII 0x43
103 { 0b00000000, 0b00000000, 0b01110000, 0b01001000, 0b01001000, 0b01001000, 0b01001000, 0b01110000 }, // ASCII 0x44
104 { 0b00000000, 0b00000000, 0b01111000, 0b01000000, 0b01000000, 0b01111000, 0b01000000, 0b01111000 }, // ASCII 0x45
105 { 0b00000000, 0b00000000, 0b01111000, 0b01000000, 0b01000000, 0b01111000, 0b01000000, 0b01000000 }, // ASCII 0x46
106 { 0b00000000, 0b00000000, 0b00111000, 0b01000000, 0b01000000, 0b01011000, 0b01001000, 0b00111000 }, // ASCII 0x47
107 { 0b00000000, 0b00000000, 0b01001000, 0b01001000, 0b01001000, 0b01111000, 0b01001000, 0b01001000 }, // ASCII 0x48
108 { 0b00000000, 0b00000000, 0b01110000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000 }, // ASCII 0x49
109 { 0b00000000, 0b00000000, 0b00110000, 0b00010000, 0b00010000, 0b00010000, 0b00010000, 0b01110000 }, // ASCII 0x4A
110 { 0b00000000, 0b00000000, 0b01001000, 0b01010000, 0b01100000, 0b01010000, 0b01010000, 0b01001000 }, // ASCII 0x4B
111 { 0b00000000, 0b00000000, 0b01000000, 0b01000000, 0b01000000, 0b01000000, 0b01000000, 0b01111000 }, // ASCII 0x4C
112 { 0b00000000, 0b00000000, 0b01001000, 0b01111000, 0b01111000, 0b01111000, 0b01001000, 0b01001000 }, // ASCII 0x4D
113 { 0b00000000, 0b00000000, 0b01001000, 0b01101000, 0b01101000, 0b01011000, 0b01011000, 0b01001000 }, // ASCII 0x4E
114 { 0b00000000, 0b00000000, 0b00110000, 0b01001000, 0b01001000, 0b01001000, 0b01001000, 0b00110000 }, // ASCII 0x4F
115 { 0b00000000, 0b00000000, 0b01111000, 0b01001000, 0b01111000, 0b01000000, 0b01000000, 0b01000000 }, // ASCII 0x50
116 { 0b00000000, 0b00000000, 0b00110000, 0b01001000, 0b01001000, 0b01001000, 0b01001000, 0b00110000 }, // ASCII 0x51
117 { 0b00000000, 0b00000000, 0b01111000, 0b01001000, 0b01110000, 0b01011000, 0b01001000, 0b01000100 }, // ASCII 0x52
118 { 0b00000000, 0b00000000, 0b00111000, 0b01000000, 0b01110000, 0b00011000, 0b00001000, 0b01111000 }, // ASCII 0x53
119 { 0b00000000, 0b00000000, 0b11111000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000 }, // ASCII 0x54
120 { 0b00000000, 0b00000000, 0b01001000, 0b01001000, 0b01001000, 0b01001000, 0b01001000, 0b00110000 }, // ASCII 0x55
121 { 0b00000000, 0b00000000, 0b01001000, 0b01001000, 0b00110000, 0b00110000, 0b00110000, 0b00110000 }, // ASCII 0x56
122 { 0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10101000, 0b01010000, 0b01010000, 0b01010000 }, // ASCII 0x57
123 { 0b00000000, 0b00000000, 0b01001000, 0b00110000, 0b00110000, 0b00110000, 0b00110000, 0b01001000 }, // ASCII 0x58
124 { 0b00000000, 0b00000000, 0b10001000, 0b01010000, 0b00100000, 0b00100000, 0b00100000, 0b00100000 }, // ASCII 0x59
125 { 0b00000000, 0b00000000, 0b01111000, 0b00010000, 0b00010000, 0b00100000, 0b00100000, 0b01111000 }, // ASCII 0x5A
126 { 0b00000000, 0b00110000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00110000 }, // ASCII 0x5B
127 { 0b00000000, 0b00000000, 0b10000000, 0b01000000, 0b01000000, 0b01100000, 0b00100000, 0b00100000 }, // ASCII 0x5C
128 { 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01100000 }, // ASCII 0x5D
129 { 0b00000000, 0b00000000, 0b01100000, 0b10010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000 }, // ASCII 0x5E
130 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000 }, // ASCII 0x5F
131 { 0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000 }, // ASCII 0x60
132 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111000, 0b01111000, 0b01001000, 0b01111000 }, // ASCII 0x61
133 { 0b00000000, 0b01000000, 0b01000000, 0b01000000, 0b01110000, 0b01001000, 0b01001000, 0b01110000 }, // ASCII 0x62
134 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00110000, 0b01000000, 0b01000000, 0b00110000 }, // ASCII 0x63
135 { 0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00111000, 0b01001000, 0b01001000, 0b00111000 }, // ASCII 0x64
136 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00111000, 0b01111000, 0b01000000, 0b00111000 }, // ASCII 0x65
137 { 0b00000000, 0b00011000, 0b00100000, 0b00100000, 0b01111000, 0b00100000, 0b00100000, 0b00100000 }, // ASCII 0x66
138 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00111000, 0b01001000, 0b01001000, 0b00111000 }, // ASCII 0x67
139 { 0b00000000, 0b01000000, 0b01000000, 0b01000000, 0b01111000, 0b01001000, 0b01001000, 0b01001000 }, // ASCII 0x68
140 { 0b00000000, 0b00100000, 0b00000000, 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b01110000 }, // ASCII 0x69
141 { 0b00000000, 0b00100000, 0b00000000, 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00100000 }, // ASCII 0x6A
142 { 0b00000000, 0b01000000, 0b01000000, 0b01000000, 0b01011000, 0b01110000, 0b01110000, 0b01011000 }, // ASCII 0x6B
143 { 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00111000 }, // ASCII 0x6C
144 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111100, 0b01010100, 0b01010100, 0b01010100 }, // ASCII 0x6D
145 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111000, 0b01001000, 0b01001000, 0b01001000 }, // ASCII 0x6E
146 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00110000, 0b01001000, 0b01001000, 0b00110000 }, // ASCII 0x6F
147 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01110000, 0b01001000, 0b01001000, 0b01110000 }, // ASCII 0x70
148 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00111000, 0b01001000, 0b01001000, 0b00111000 }, // ASCII 0x71
149 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01110000, 0b01000000, 0b01000000, 0b01000000 }, // ASCII 0x72
150 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111000, 0b01110000, 0b00001000, 0b01111000 }, // ASCII 0x73
151 { 0b00000000, 0b00000000, 0b00000000, 0b00100000, 0b01111000, 0b00100000, 0b00100000, 0b00111000 }, // ASCII 0x74
152 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01001000, 0b01001000, 0b01001000, 0b01111000 }, // ASCII 0x75
153 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01001000, 0b00110000, 0b00110000, 0b00110000 }, // ASCII 0x76
154 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b10001000, 0b10101000, 0b01110000, 0b01010000 }, // ASCII 0x77
155 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111000, 0b00110000, 0b00110000, 0b01111000 }, // ASCII 0x78
156 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01001000, 0b00110000, 0b00110000, 0b00100000 }, // ASCII 0x79
157 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111000, 0b00110000, 0b00100000, 0b01111000 }, // ASCII 0x7A
158 { 0b00000000, 0b00110000, 0b00100000, 0b00100000, 0b01000000, 0b00100000, 0b00100000, 0b00110000 }, // ASCII 0x7B
159 { 0b00000000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000 }, // ASCII 0x7C
160 { 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00010000, 0b00100000, 0b00100000, 0b01100000 }, // ASCII 0x7D
161 { 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111000, 0b00000000, 0b00000000 }, // ASCII 0x7E
162 };
163};
uint32_t width
Definition BMPFile.hpp:1
uint32_t height
Definition BMPFile.hpp:2
uint8_t bpp
Definition GitBoot.hpp:6
uint32_t framebuffer
Definition GitBoot.hpp:14
Definition graphics.hpp:10
TEXT_MODE_COLOR
Definition graphics.hpp:15
@ WHITE
Definition graphics.hpp:31
Definition MemoryFS.hpp:16
Definition vbe_graphics.hpp:12
void mount_fb()
Definition vbe_graphics.cpp:214
virtual void draw_char(uint32_t x, uint32_t y, char c, uint32_t color)
Definition vbe_graphics.cpp:50
virtual void print_char(char c)
Definition vbe_graphics.cpp:94
virtual uint32_t get_cursor_x()
Definition vbe_graphics.cpp:85
virtual TEXT_MODE_COLOR get_current_color()
Definition vbe_graphics.cpp:89
virtual void clear_screen()
Definition vbe_graphics.cpp:160
uint32_t get_rrggbb_color(TEXT_MODE_COLOR color)
Definition vbe_graphics.cpp:220
void scroll_screen(int i)
Definition vbe_graphics.cpp:147
virtual void print_string(const char *str)
Definition vbe_graphics.cpp:137
uint32_t get_width() const
Definition vbe_graphics.cpp:191
virtual void set_cursor(uint32_t x, uint32_t y)
Definition vbe_graphics.cpp:154
uint32_t get_framebuffer_size() const
Definition vbe_graphics.cpp:176
virtual uint32_t get_cursor_y()
Definition vbe_graphics.cpp:81
virtual void set_text_color(TEXT_MODE_COLOR color)
Definition vbe_graphics.cpp:142
virtual void draw_pixel(uint32_t x, uint32_t y, uint32_t color)
Definition vbe_graphics.cpp:27
virtual void print_char_color(char c, TEXT_MODE_COLOR color)
Definition vbe_graphics.cpp:99
uint8_t * get_framebuffer() const
Definition vbe_graphics.cpp:196
bool is_vbe() const
Definition vbe_graphics.cpp:171
virtual void draw_string(uint32_t x, uint32_t y, const char *str, uint32_t color)
Definition vbe_graphics.cpp:72
void setup(uint8_t *framebuffer, uint32_t bpp, uint32_t width, uint32_t height)
Definition vbe_graphics.cpp:201
static Graphics * the()
Definition vbe_graphics.cpp:20
virtual void print_string_color(const char *str, TEXT_MODE_COLOR color)
Definition vbe_graphics.cpp:129
uint32_t get_height() const
Definition vbe_graphics.cpp:186
uint32_t get_bpp() const
Definition vbe_graphics.cpp:181