1
0
mirror of https://github.com/rcore-os/rCore.git synced 2024-11-22 16:16:16 +04:00

fix fb_bitfield for all pixel formats

This commit is contained in:
Runji Wang 2019-11-02 01:15:39 +08:00
parent 242cbfa76c
commit 7d849f8d30

View File

@ -1,6 +1,6 @@
use rcore_fs::vfs::*;
use crate::drivers::gpu::fb::{FramebufferInfo, FRAME_BUFFER};
use crate::drivers::gpu::fb::{ColorFormat, FramebufferInfo, FRAME_BUFFER};
use crate::memory::phys_to_virt;
use alloc::{string::String, sync::Arc, vec::Vec};
use core::any::Any;
@ -244,24 +244,31 @@ impl FbVarScreeninfo {
self.xoffset = fb_info.xoffset;
self.yoffset = fb_info.yoffset;
self.bits_per_pixel = fb_info.depth as u32;
let (rl, gl, bl, al, ro, go, bo, ao) = match fb_info.format {
ColorFormat::RGB332 => (3, 3, 2, 0, 5, 3, 0, 0),
ColorFormat::RGB565 => (5, 6, 5, 0, 11, 5, 0, 0),
ColorFormat::RGBA8888 => (8, 8, 8, 8, 16, 8, 0, 24),
ColorFormat::BGRA8888 => (8, 8, 8, 8, 0, 8, 16, 24),
ColorFormat::VgaPalette => unimplemented!(),
};
self.blue = FbBitfield {
offset: 0,
length: fb_info.depth as u32 / 4,
offset: bo,
length: bl,
msb_right: 1,
};
self.green = FbBitfield {
offset: fb_info.depth as u32 / 4,
length: fb_info.depth as u32 / 4,
offset: go,
length: gl,
msb_right: 1,
};
self.red = FbBitfield {
offset: fb_info.depth as u32 / 2,
length: fb_info.depth as u32 / 4,
offset: ro,
length: rl,
msb_right: 1,
};
self.transp = FbBitfield {
offset: fb_info.depth as u32 * 3 / 4,
length: fb_info.depth as u32 / 4,
offset: ao,
length: al,
msb_right: 1,
};
}