6个版本
0.3.1 | 2021年1月2日 |
---|---|
0.3.0 | 2020年12月30日 |
0.2.0 | 2020年12月28日 |
0.1.2 | 2020年12月28日 |
0.1.0 | 2020年9月17日 |
在操作系统类别中排名第596
每月下载量:33次
14KB
177 代码行
screen_layer
此crate提供了屏幕层结构,这对于开发操作系统非常有用。
此crate使用alloc
crate的功能,因此您必须extern alloc
crate。这意味着您必须定义自己的堆分配器。
目前此crate仅支持BGR顺序的24位或32位颜色。
示例
use screen_layer::{self, Layer, Vec2, RGB8};
const SCREEN_WIDTH: u32 = 10;
const SCREEN_HEIGHT: u32 = 10;
const BPP: u32 = 32;
let mut pseudo_vram = [0u8; (SCREEN_WIDTH * SCREEN_HEIGHT * BPP / 8) as usize];
let ptr = pseudo_vram.as_ptr() as usize;
let mut controller =
unsafe { screen_layer::Controller::new(Vec2::new(SCREEN_WIDTH, SCREEN_HEIGHT), BPP, ptr) };
const LAYER_WIDTH: u32 = 5;
const LAYER_HEIGHT: u32 = 5;
let layer = Layer::new(Vec2::new(0, 0), Vec2::new(LAYER_WIDTH, LAYER_HEIGHT));
let id = controller.add_layer(layer);
controller
.edit_layer(id, |layer: &mut Layer| {
for i in 0..LAYER_WIDTH {
layer[i as usize][i as usize] = Some(RGB8::new(0, 255, 0));
}
})
.unwrap();
for i in 0..LAYER_WIDTH {
assert_eq!(pseudo_vram[(BPP / 8 * (i * SCREEN_WIDTH + i)) as usize], 0);
assert_eq!(pseudo_vram[(BPP / 8 * (i * SCREEN_WIDTH + i) + 1) as usize], 255);
assert_eq!(pseudo_vram[(BPP / 8 * (i * SCREEN_WIDTH + i) + 2) as usize], 0);
}
controller.set_pixel(id, Vec2::one(), Some(RGB8::new(255, 0, 0)));
assert_eq!(pseudo_vram[(BPP / 8 * (1 * SCREEN_WIDTH + 1)) as usize], 0);
assert_eq!(pseudo_vram[(BPP / 8 * (1 * SCREEN_WIDTH + 1) + 1) as usize], 0);
assert_eq!(pseudo_vram[(BPP / 8 * (1 * SCREEN_WIDTH + 1) + 2) as usize], 255);
授权:MPL-2.0
依赖项
~1.5MB
~23K SLoC