21个版本 (11个重大更新)

0.12.0 2024年4月18日
0.11.1 2024年1月4日
0.11.0 2023年11月14日
0.9.0 2023年3月24日
0.1.0 2017年1月24日

#24 in Unix API

Download history 13073/week @ 2024-04-16 12598/week @ 2024-04-23 13524/week @ 2024-04-30 15472/week @ 2024-05-07 13630/week @ 2024-05-14 12950/week @ 2024-05-21 13054/week @ 2024-05-28 14527/week @ 2024-06-04 32165/week @ 2024-06-11 29420/week @ 2024-06-18 29745/week @ 2024-06-25 22652/week @ 2024-07-02 25860/week @ 2024-07-09 26195/week @ 2024-07-16 26924/week @ 2024-07-23 18851/week @ 2024-07-30

每月下载量 102,538次
用于 21 个crate(直接使用10个)

MIT 许可证

160KB
3.5K SLoC

drm-rs

Crates.io docs.rs Build Status

Direct Rendering Manager的安全接口。

直接渲染管理器

Direct Rendering Manager是多个基于Unix的操作系统中的一种子系统,它为图形硬件提供了一个用户空间API。有关详细信息,请参阅维基百科文章

用法

基本

通过表示图形卡的文件上的 ioctl 访问DRM。这些通常可以在 /dev/dri 中找到,但也可以以其他方式打开(例如udev)。

此crate不提供打开这些文件的方法。相反,用户程序必须通过 AsFd 特性提供一种访问表示设备文件描述符的方法。以下是一个使用 File 作为后端的基本示例

/// A simple wrapper for a device node.
pub struct Card(std::fs::File);

/// Implementing [`AsFd`] is a prerequisite to implementing the traits found
/// in this crate. Here, we are just calling [`File::as_fd()`] on the inner
/// [`File`].
impl AsFd for Card {
    fn as_fd(&self) -> BorrowedFd<'_> {
        self.0.as_fd()
    }
}

/// Simple helper methods for opening a `Card`.
impl Card {
    pub fn open(path: &str) -> Self {
        let mut options = std::fs::OpenOptions::new();
        options.read(true);
        options.write(true);
        Card(options.open(path).unwrap())
    }
}

最后,您可以实现 drm::Device 以访问基本的DRM功能

impl drm::Device for Card {}

fn main() {
    let gpu = Card::open("/dev/dri/card0");
    println!("{:#?}", gpu.get_driver().unwrap());
}

控制(模式设置)

请参阅 drm::control::Device 以及我们的模式设置示例: atomic_modesetlegacy_modeset

渲染

通过 创建附加 framebufferscrtcs 来进行渲染。

从实现 Buffer 的任何内容创建帧缓冲区,如始终可用但非常有限的 DumbBuffer

对于更快的基于硬件的缓冲区,请查看 gbm.rs

依赖关系

~2–11MB
~123K SLoC