12个不稳定版本 (3个重大更改)
新功能 0.4.2 | 2024年8月21日 |
---|---|
0.4.1 | 2024年8月21日 |
0.3.1 | 2024年8月3日 |
0.3.0 | 2024年7月24日 |
0.1.0 | 2024年4月16日 |
在嵌入式开发类别中排名497
每月下载量321次
12KB
132 行
Uefi-graphics2
一个针对UEFI环境的嵌入式图形显示驱动程序,基于embedded-graphics
crate。
支持
- 双缓冲
- 显示调整大小
- 使用
embedded-graphics
crate的丰富绘图/渲染库
为什么有另外两个crate用于这项工作?
uefi-graphics
和 uefi-graphics-driver
是两个提供类似功能的crate,遗憾的是,两者似乎都缺乏功能或未维护。
示例
以下是一个简单的示例,使用版本 0.30.0
的 uefi
crate。
#![no_main]
#![no_std]
extern crate alloc;
use uefi::prelude::*;
use uefi::proto::console::gop::GraphicsOutput;
use uefi_graphics2::embedded_graphics::pixelcolor::{Rgb888, RgbColor};
use uefi_graphics2::UefiDisplay;
#[entry]
fn main(_image_handle: Handle, mut boot_system_table: SystemTable<Boot>) -> Status {
uefi::helpers::init(&mut boot_system_table).unwrap();
// Disable the watchdog timer
boot_system_table
.boot_services()
.set_watchdog_timer(0, 0x10000, None)
.unwrap();
let boot_services = boot_system_table.boot_services();
// Get gop
let gop_handle = boot_services.get_handle_for_protocol::<GraphicsOutput>().unwrap();
let mut gop = boot_services.open_protocol_exclusive::<GraphicsOutput>(gop_handle).unwrap();
// Create UefiDisplay
let mode = gop.current_mode_info();
let mut display = UefiDisplay::new(gop.frame_buffer(), mode);
// Tint the entire screen cyan
display.fill_entire(Rgb888::CYAN).unwrap();
// Draw everything
display.flush();
// wait 10000000 microseconds (10 seconds)
boot_services.stall(10_000_000);
Status::SUCCESS
}
更多示例可以在示例目录 uefi-graphics2/examples
中找到。
贡献和更新
如果任何依赖项过时、出现错误或请求新功能,请通知我并创建一个问题。
欢迎贡献,随时创建pull request。
如果您喜欢这个项目,别忘了在github上给它一个star!
依赖项
~6MB
~97K SLoC