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
每月下载量 102,538次
用于 21 个crate(直接使用10个)
160KB
3.5K SLoC
drm-rs
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_modeset
和 legacy_modeset
渲染
通过 创建 和 附加 framebuffers 到 crtcs 来进行渲染。
从实现 Buffer
的任何内容创建帧缓冲区,如始终可用但非常有限的 DumbBuffer
。
对于更快的基于硬件的缓冲区,请查看 gbm.rs。
依赖关系
~2–11MB
~123K SLoC