#bindings #buffer #gbm #unsafe #management #devices #libgbm

sys gbm-sys

由 Bindgen 生成的 unsafe libgbm 包装器

5 个不稳定版本

0.3.0 2023年11月14日
0.2.2 2023年1月3日
0.2.1 2022年8月29日
0.2.0 2021年5月7日
0.1.0 2017年9月11日

#202 in 图形 API

Download history 5672/week @ 2024-03-14 6835/week @ 2024-03-21 6275/week @ 2024-03-28 5372/week @ 2024-04-04 5010/week @ 2024-04-11 7033/week @ 2024-04-18 5673/week @ 2024-04-25 7738/week @ 2024-05-02 8115/week @ 2024-05-09 7450/week @ 2024-05-16 6682/week @ 2024-05-23 6655/week @ 2024-05-30 15604/week @ 2024-06-06 25256/week @ 2024-06-13 21490/week @ 2024-06-20 18960/week @ 2024-06-27

82,364 每月下载量
用于 13 个包 (直接使用 3 个)

MIT 许可证

15KB
365 代码行

为 Rust 提供安全的 libgbm 绑定

通用缓冲区管理器

此模块提供了一种抽象,调用者可以使用它从平台的底层内存管理系统请求缓冲区。

这允许创建可移植的代码,同时仍然允许访问底层的内存管理器。

此库最好与 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();

依赖项

~175KB