| #![allow(dead_code)] |
| |
| pub use drm::control::Device as ControlDevice; |
| pub use drm::Device; |
| |
| #[derive(Debug)] |
| /// 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 `as_fd()` on the inner File. |
| impl std::os::unix::io::AsFd for Card { |
| fn as_fd(&self) -> std::os::unix::io::BorrowedFd<'_> { |
| self.0.as_fd() |
| } |
| } |
| |
| /// With `AsFd` implemented, we can now implement `drm::Device`. |
| impl Device for Card {} |
| impl ControlDevice for Card {} |
| |
| /// 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()) |
| } |
| |
| pub fn open_global() -> Self { |
| Self::open("/dev/dri/card0") |
| } |
| } |
| |
| pub mod capabilities { |
| use drm::ClientCapability as CC; |
| pub const CLIENT_CAP_ENUMS: &[CC] = &[CC::Stereo3D, CC::UniversalPlanes, CC::Atomic]; |
| |
| use drm::DriverCapability as DC; |
| pub const DRIVER_CAP_ENUMS: &[DC] = &[ |
| DC::DumbBuffer, |
| DC::VBlankHighCRTC, |
| DC::DumbPreferredDepth, |
| DC::DumbPreferShadow, |
| DC::Prime, |
| DC::MonotonicTimestamp, |
| DC::ASyncPageFlip, |
| DC::CursorWidth, |
| DC::CursorHeight, |
| DC::AddFB2Modifiers, |
| DC::PageFlipTarget, |
| DC::CRTCInVBlankEvent, |
| DC::SyncObj, |
| DC::TimelineSyncObj, |
| ]; |
| } |
| |
| pub mod images { |
| use image; |
| |
| pub fn load_image(name: &str) -> image::RgbaImage { |
| let path = format!("examples/images/{}", name); |
| image::open(path).unwrap().to_rgba8() |
| } |
| } |