Skip to content

Commit 9664c74

Browse files
committed
kernel.c apps into backbuf
1 parent f58126b commit 9664c74

1 file changed

Lines changed: 10 additions & 8 deletions

File tree

src/kernel.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -132,21 +132,23 @@ void sys_draw_app_buffer(int x, int y, int w, int h, uint32_t *buffer) {
132132
fg_app_pid = current_task->id;
133133
}
134134

135+
// Обрезка границ
135136
if (x < 0) x = 0;
136137
if (y < 0) y = 0;
137138
if (x >= (int)screen_width || y >= (int)screen_height) return;
138139
if (x + w > (int)screen_width) w = (int)screen_width - x;
139140
if (y + h > (int)screen_height) h = (int)screen_height - y;
140141
if (w <= 0 || h <= 0) return;
141142

142-
size_t row_bytes = (size_t)w * 4;
143-
for (int row = 0; row < h; row++) {
144-
uint8_t *dst = (uint8_t *)(fb_base_addr +
145-
(uintptr_t)(y + row) * screen_pitch +
146-
(uintptr_t)x * 4);
147-
uint8_t *src = (uint8_t *)(buffer + (size_t)row * (size_t)w);
148-
memcpy(dst, src, row_bytes);
149-
}
143+
// 1. Копируем данные в бэкбуфер ядра (очень быстрая операция RAM -> RAM)
144+
vesa_draw_buffer(x, y, w, h, buffer);
145+
146+
// 2. Помечаем измененную область грязной в сетке тайлов
147+
vesa_mark_dirty(x, y, w, h);
148+
149+
// 3. Вызываем обновление экрана.
150+
// vesa_update сама скопирует только грязные тайлы быстрыми QWORD-пакетами.
151+
vesa_update();
150152
}
151153

152154
void network_thread() {

0 commit comments

Comments
 (0)