Графика, часть 2
Большинство систем используют модель RGB (красный, зеленый, синий). Чтобы изменить цвет пикселя в координатах (X,Y = 10,12), необходимо вычислить его адрес (смещение) в массиве фреймбуфера. Если ширина экрана - w, глубина цвета - D, то смещение для пикселя (10,12) равно:
int x = 10;
int y = 12;
int offset = (y * w + x) * D;
Таким образом мы можем перекрасить любой пиксель экрана. К примеру:
// Пример адреса фреймбуфера
// Настоящий вы можете получить от загрузчика или BIOS/UEFI
unsigned int *framebufer = (unsigned int*)0xFFD00000;
int screen_w = 1920;
int screen_h = 1080;
int screen_dept = 4;
void draw_pixel(int x, int y, unsigned int color) {
int offset = (y * w + x) * D;
}
void test_framebufer() {
memset(framebufer, 0, screen_w * screen_h * screen_dept); // Очищаем экран
for (int i = 0; i < 10; i++) {
// Рисуем линию
draw_pixel(i, i, 0xFF000000);
}
}