add "fb" module for framebuffer control
This commit is contained in:
parent
67b90a482f
commit
bb495eceec
30
src/fb.c
Normal file
30
src/fb.c
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#include "fb.h"
|
||||||
|
|
||||||
|
static uint32_t * fb;
|
||||||
|
static uint32_t fb_width;
|
||||||
|
static uint32_t fb_height;
|
||||||
|
static uint32_t fb_pitch;
|
||||||
|
|
||||||
|
void fb_init(uint32_t * addr, uint32_t width, uint32_t height, uint32_t pitch)
|
||||||
|
{
|
||||||
|
fb = addr;
|
||||||
|
fb_width = width;
|
||||||
|
fb_height = height;
|
||||||
|
fb_pitch = pitch;
|
||||||
|
for (uint32_t row = 0u; row < fb_height; row++)
|
||||||
|
{
|
||||||
|
for (uint32_t col = 0u; col < fb_width; col++)
|
||||||
|
{
|
||||||
|
uint32_t er = (col * fb_height) / fb_width;
|
||||||
|
int32_t dr = (int32_t)row - (int32_t)er;
|
||||||
|
if (dr < 0)
|
||||||
|
{
|
||||||
|
dr = -dr;
|
||||||
|
}
|
||||||
|
uint8_t r = 255u - ((uint32_t)dr * 256u / fb_height);
|
||||||
|
uint8_t g = col * 256u / fb_width;
|
||||||
|
uint8_t b = row * 256u / fb_height;
|
||||||
|
fb[fb_pitch * row / 4u + col] = (r << 16u) | (g << 8u) | b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
8
src/fb.h
Normal file
8
src/fb.h
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#ifndef FB_H
|
||||||
|
#define FB_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
void fb_init(uint32_t * addr, uint32_t width, uint32_t height, uint32_t pitch);
|
||||||
|
|
||||||
|
#endif
|
@ -1,9 +1,5 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include "fb.h"
|
||||||
uint32_t * fb;
|
|
||||||
uint32_t pitch;
|
|
||||||
uint32_t width;
|
|
||||||
uint32_t height;
|
|
||||||
|
|
||||||
static uint32_t * process_mbinfo_tag(uint32_t * mbinfo)
|
static uint32_t * process_mbinfo_tag(uint32_t * mbinfo)
|
||||||
{
|
{
|
||||||
@ -15,10 +11,7 @@ static uint32_t * process_mbinfo_tag(uint32_t * mbinfo)
|
|||||||
return 0u;
|
return 0u;
|
||||||
|
|
||||||
case 8u:
|
case 8u:
|
||||||
fb = (uint32_t *)mbinfo[2];
|
fb_init((uint32_t *)mbinfo[2], mbinfo[5], mbinfo[6], mbinfo[4]);
|
||||||
pitch = mbinfo[4];
|
|
||||||
width = mbinfo[5];
|
|
||||||
height = mbinfo[6];
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return (uint32_t *)(((uint32_t)mbinfo + size + 7u) & 0xFFFFFFF8u);
|
return (uint32_t *)(((uint32_t)mbinfo + size + 7u) & 0xFFFFFFF8u);
|
||||||
@ -37,20 +30,4 @@ static void process_mbinfo(uint32_t * mbinfo)
|
|||||||
void kernel_main(uint32_t * mbinfo)
|
void kernel_main(uint32_t * mbinfo)
|
||||||
{
|
{
|
||||||
process_mbinfo(mbinfo);
|
process_mbinfo(mbinfo);
|
||||||
for (uint32_t row = 0u; row < height; row++)
|
|
||||||
{
|
|
||||||
for (uint32_t col = 0u; col < width; col++)
|
|
||||||
{
|
|
||||||
uint32_t er = (col * height) / width;
|
|
||||||
int32_t dr = (int32_t)row - (int32_t)er;
|
|
||||||
if (dr < 0)
|
|
||||||
{
|
|
||||||
dr = -dr;
|
|
||||||
}
|
|
||||||
uint8_t r = 255u - ((uint32_t)dr * 256u / height);
|
|
||||||
uint8_t g = col * 256u / width;
|
|
||||||
uint8_t b = row * 256u / height;
|
|
||||||
fb[pitch * row / 4u + col] = (r << 16u) | (g << 8u) | b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user