#bindings #drm #wayland

gbm

libgbm的Rust绑定

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 内存管理

Download history 6363/week @ 2024-04-29 9582/week @ 2024-05-06 8306/week @ 2024-05-13 7242/week @ 2024-05-20 6940/week @ 2024-05-27 7519/week @ 2024-06-03 23626/week @ 2024-06-10 23065/week @ 2024-06-17 24080/week @ 2024-06-24 17525/week @ 2024-07-01 14641/week @ 2024-07-08 13417/week @ 2024-07-15 14573/week @ 2024-07-22 12987/week @ 2024-07-29 14490/week @ 2024-08-05 13037/week @ 2024-08-12

每月56,267次下载
11 个Crates中使用 (直接使用3个)

MIT 许可证

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