19个版本 (破坏性更新)
0.15.0 | 2024年4月19日 |
---|---|
0.14.2 | 2024年2月15日 |
0.14.0 | 2023年11月14日 |
0.12.0 | 2023年3月30日 |
0.1.0 | 2016年8月24日 |
#25 in 内存管理
每月56,267次下载
在 11 个Crates中使用 (直接使用3个)
66KB
1.5K SLoC
安全 libgbm
绑定,适用于 rust
通用缓冲区管理器
此模块提供了调用者可以用于从平台下的内存管理系统请求缓冲区的抽象。
这允许创建可移植的代码,同时仍然可以访问底层的内存管理器。
此库最好与 drm-rs
一起使用,通过 drm-support
功能提供。
用法
添加到您的 Cargo.toml
gbm = "0.15.0"
示例
extern crate drm;
extern crate gbm;
use drm::control::{self, crtc, framebuffer};
use gbm::{BufferObjectFlags, Device, Format};
// ... init your drm device ...
let drm = init_drm_device();
// init a GBM device
let gbm = Device::new(drm).unwrap();
// create a buffer
let mut bo = gbm
.create_buffer_object::<()>(
1280,
720,
Format::Argb8888,
BufferObjectFlags::SCANOUT | BufferObjectFlags::WRITE,
)
.unwrap();
// write something to it (usually use import or egl rendering instead)
let buffer = {
let mut buffer = Vec::new();
for i in 0..1280 {
for _ in 0..720 {
buffer.push(if i % 2 == 0 { 0 } else { 255 });
}
}
buffer
};
bo.write(&buffer).unwrap();
// create a framebuffer from our buffer
let fb = gbm.add_framebuffer(&bo, 32, 32).unwrap();
// display it (and get a crtc, mode and connector before)
gbm.set_crtc(crtc_handle, Some(fb), (0, 0), &[con], Some(mode))
.unwrap();
依赖项
~0.1–9.5MB
~102K SLoC