Как реализовать прокрутку vesa framebuffer`a? Доброго времени суток!
Начитался статей на хабре про написание хоби-ОС.
Пишу вывод текста через framebuffer. Когда текст достигает нижней границы экрана, надо с ним что-то делать. Я решил перемещать изображение вверх, и на освободившемся месте рисовать строку текста.void fb_set_pix(int x,int y,uint32_t color)
{
unsigned where = x*(fbbpp/8) + y*fbpitch;
framebuffer[where + 0] = color; // BLUE
framebuffer[where + 1] = (color >> 8); // GREEN
framebuffer[where + 2] = (color >> 16); // RED
}
uint32_t fb_get_pix(int x,int y){
unsigned where = x*(fbbpp/8) + y*fbpitch;
uint32_t color=0;
color = framebuffer[where + 0] + (framebuffer[where + 1] << 8) + (framebuffer[where + 1] << 16);
return color;
}
void fb_scroll_y(int numpix, uint32_t color) {
int i,j;
// смещаем верх
for(i=numpix; i<768; i++){ // height
for(j=0; j<1024; j++){ // width
fb_set_pix(j,i-numpix,fb_get_pix(j,i));
}
}
// красим низ
for(i=fb_screenH-numpix; i<768; i++){ // height
for(j=0; j<1024; j++){ // width
fb_set_pix(j,i,color);
}
}
}
Однако приведённый пример работает слишком медленно - экран обновляется чуть больше чем за секунду.
Как можно ускорить прокрутку, или может есть более правильная её реализация?

21 Авг 2019 в 06:53
194 +1
0
Ответы
1

Для ускорения прокрутки vesa framebuffer'a можно воспользоваться следующими методами:

Использование аппаратного ускорения: некоторые графические карты поддерживают аппаратное ускорение прокрутки изображения. Вы можете использовать специальные команды или функции для ускорения этого процесса.

Оптимизация алгоритма: пересмотрите ваш алгоритм прокрутки и посмотрите, можно ли его оптимизировать. Например, вместо копирования каждого пикселя по отдельности можно использовать более эффективные методы, такие как копирование блоков памяти или использование более быстрых арифметических операций.

Использование двойного буфера: вы можете использовать двойной буфер (double buffering) для рисования и прокрутки изображения. Это позволит вам рисовать новое изображение в основном буфере, пока происходит прокрутка во втором буфере, и затем переключить их местами.

Использование готовых библиотек: существуют готовые библиотеки и инструменты для работы с vesa framebuffer, которые могут предоставить более эффективные методы прокрутки изображения.

Параллельная обработка: если ваша система поддерживает параллельную обработку, вы можете использовать несколько ядер процессора для ускорения прокрутки.

Используйте эти методы для оптимизации вашего кода и ускорения прокрутки vesa framebuffer'a.

20 Апр в 13:11
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 94 757 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир