@Kop3t3

Как реализовать прокрутку 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);
		}
	}
}

Однако приведённый пример работает слишком медленно - экран обновляется чуть больше чем за секунду.
Как можно ускорить прокрутку, или может есть более правильная её реализация?
  • Вопрос задан
  • 252 просмотра
Решения вопроса 1
@Kop3t3 Автор вопроса
В моём случае помогло добавить -O3 для оптимизации.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы