use std::ptr;
use libc::c_int;
use wlroots_sys::{wlr_backend, wl_display, wlr_drm_backend_create, wlr_output_is_drm};
use {output::Output,
backend::{UnsafeRenderSetupFunction, Session},
utils::Handleable};
#[derive(Debug, Hash, Eq, PartialEq)]
pub struct Drm {
pub(crate) backend: *mut wlr_backend
}
impl Drm {
pub unsafe fn new(display: *mut wl_display,
session: Session,
gpu_fd: c_int,
parent: Option<Drm>,
render_setup_func: Option<UnsafeRenderSetupFunction>)
-> Self {
let parent_ptr = parent.map(|backend| backend.as_ptr()).unwrap_or_else(ptr::null_mut);
let backend = wlr_drm_backend_create(display,
session.as_ptr(),
gpu_fd,
parent_ptr,
render_setup_func);
if backend.is_null() {
panic!("Could not construct X11 backend");
}
Drm { backend }
}
pub fn output_is_drm(&self, output: &Output) -> bool {
unsafe {
wlr_output_is_drm(output.as_ptr())
}
}
pub unsafe fn as_ptr(&self) -> *mut wlr_backend {
self.backend
}
}