Fix drm example and tests
This commit is contained in:
parent
35b20450c5
commit
ae5df5039d
|
@ -31,7 +31,7 @@ use std::cell::RefCell;
|
||||||
use std::fs::OpenOptions;
|
use std::fs::OpenOptions;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use wayland_server::{EventLoopHandle, StateToken};
|
use wayland_server::{StateToken, StateProxy};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// A logger facility, here we use the terminal for this example
|
// A logger facility, here we use the terminal for this example
|
||||||
|
@ -84,13 +84,13 @@ fn main() {
|
||||||
{
|
{
|
||||||
// Initialize the hardware backend
|
// Initialize the hardware backend
|
||||||
let renderer = device
|
let renderer = device
|
||||||
.create_backend(crtc, mode, vec![connector_info.handle()])
|
.create_backend(event_loop.state(), crtc, mode, vec![connector_info.handle()])
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize glium
|
* Initialize glium
|
||||||
*/
|
*/
|
||||||
let mut frame = renderer.draw();
|
let mut frame = event_loop.state().get(renderer).draw();
|
||||||
frame.clear_color(0.8, 0.8, 0.9, 1.0);
|
frame.clear_color(0.8, 0.8, 0.9, 1.0);
|
||||||
frame.finish().unwrap();
|
frame.finish().unwrap();
|
||||||
}
|
}
|
||||||
|
@ -140,11 +140,10 @@ pub struct DrmHandlerImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DrmHandler<GliumDrawer<DrmBackend>> for DrmHandlerImpl {
|
impl DrmHandler<GliumDrawer<DrmBackend>> for DrmHandlerImpl {
|
||||||
fn ready(&mut self, evlh: &mut EventLoopHandle, device: &StateToken<DrmDevice<GliumDrawer<DrmBackend>>>,
|
fn ready<'a, S: Into<StateProxy<'a>>>(&mut self, state: S, _device: &mut DrmDevice<GliumDrawer<DrmBackend>>,
|
||||||
crtc: &crtc::Handle, _frame: u32, _duration: Duration) {
|
backend: &StateToken<GliumDrawer<DrmBackend>>, _crtc: crtc::Handle, _frame: u32, _duration: Duration) {
|
||||||
let state = evlh.state();
|
let state = state.into();
|
||||||
let dev = state.get(device);
|
let drawer = state.get(backend);
|
||||||
let drawer = dev.backend_for_crtc(crtc).unwrap();
|
|
||||||
let mut frame = drawer.draw();
|
let mut frame = drawer.draw();
|
||||||
frame.clear_color(0.8, 0.8, 0.9, 1.0);
|
frame.clear_color(0.8, 0.8, 0.9, 1.0);
|
||||||
// redraw the frame, in a simple but inneficient way
|
// redraw the frame, in a simple but inneficient way
|
||||||
|
@ -187,7 +186,7 @@ impl DrmHandler<GliumDrawer<DrmBackend>> for DrmHandlerImpl {
|
||||||
frame.finish().unwrap();
|
frame.finish().unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn error(&mut self, _evlh: &mut EventLoopHandle, _device: &StateToken<DrmDevice<GliumDrawer<DrmBackend>>>,
|
fn error<'a, S: Into<StateProxy<'a>>>(&mut self, _state: S, _device: &mut DrmDevice<GliumDrawer<DrmBackend>>,
|
||||||
error: DrmError) {
|
error: DrmError) {
|
||||||
panic!("{:?}", error);
|
panic!("{:?}", error);
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,11 +90,11 @@
|
||||||
//!
|
//!
|
||||||
//! // Create the backend
|
//! // Create the backend
|
||||||
//! let backend: StateToken<DrmBackend> = device.create_backend(
|
//! let backend: StateToken<DrmBackend> = device.create_backend(
|
||||||
//! &mut event_loop,
|
//! event_loop.state(),
|
||||||
//! crtc,
|
//! crtc,
|
||||||
//! mode,
|
//! mode,
|
||||||
//! vec![connector_info.handle()]
|
//! vec![connector_info.handle()]
|
||||||
//! ).unwrap();
|
//! ).unwrap().clone();
|
||||||
//! # }
|
//! # }
|
||||||
//! ```
|
//! ```
|
||||||
//!
|
//!
|
||||||
|
@ -118,12 +118,13 @@
|
||||||
//! #
|
//! #
|
||||||
//! # use drm::control::{Device as ControlDevice, ResourceInfo};
|
//! # use drm::control::{Device as ControlDevice, ResourceInfo};
|
||||||
//! # use drm::control::connector::{Info as ConnectorInfo, State as ConnectorState};
|
//! # use drm::control::connector::{Info as ConnectorInfo, State as ConnectorState};
|
||||||
|
//! use drm::control::crtc::{Handle as CrtcHandle};
|
||||||
//! use drm::result::Error as DrmError;
|
//! use drm::result::Error as DrmError;
|
||||||
//! # use std::fs::OpenOptions;
|
//! # use std::fs::OpenOptions;
|
||||||
//! # use std::time::Duration;
|
//! # use std::time::Duration;
|
||||||
//! use smithay::backend::drm::{DrmDevice, DrmBackend, DrmHandler, drm_device_bind};
|
//! use smithay::backend::drm::{DrmDevice, DrmBackend, DrmHandler, drm_device_bind};
|
||||||
//! use smithay::backend::graphics::egl::EGLGraphicsBackend;
|
//! use smithay::backend::graphics::egl::EGLGraphicsBackend;
|
||||||
//! use wayland_server::{EventLoopHandle, StateToken};
|
//! use wayland_server::{StateToken, StateProxy};
|
||||||
//! #
|
//! #
|
||||||
//! # fn main() {
|
//! # fn main() {
|
||||||
//! #
|
//! #
|
||||||
|
@ -145,29 +146,32 @@
|
||||||
//! # let crtc = res_handles.crtcs()[0];
|
//! # let crtc = res_handles.crtcs()[0];
|
||||||
//! # let mode = connector_info.modes()[0];
|
//! # let mode = connector_info.modes()[0];
|
||||||
//! # let backend: StateToken<DrmBackend> = device.create_backend(
|
//! # let backend: StateToken<DrmBackend> = device.create_backend(
|
||||||
//! # &mut event_loop,
|
//! # event_loop.state(),
|
||||||
//! # crtc,
|
//! # crtc,
|
||||||
//! # mode,
|
//! # mode,
|
||||||
//! # vec![connector_info.handle()]
|
//! # vec![connector_info.handle()]
|
||||||
//! # ).unwrap();
|
//! # ).unwrap().clone();
|
||||||
//!
|
//!
|
||||||
//! struct MyDrmHandler;
|
//! struct MyDrmHandler;
|
||||||
//!
|
//!
|
||||||
//! impl DrmHandler<DrmBackend> for MyDrmHandler {
|
//! impl DrmHandler<DrmBackend> for MyDrmHandler {
|
||||||
//! fn ready(&mut self,
|
//! fn ready<'a, S: Into<StateProxy<'a>>>(
|
||||||
//! evlh: &mut EventLoopHandle,
|
//! &mut self,
|
||||||
//! _device: &mut DrmDevice<DrmBackend>,
|
//! state: S,
|
||||||
//! backend: &StateToken<DrmBackend>,
|
//! _device: &mut DrmDevice<DrmBackend>,
|
||||||
//! _frame: u32,
|
//! backend: &StateToken<DrmBackend>,
|
||||||
//! _duration: Duration)
|
//! _crtc: CrtcHandle,
|
||||||
|
//! _frame: u32,
|
||||||
|
//! _duration: Duration)
|
||||||
//! {
|
//! {
|
||||||
//! // render surfaces and swap again
|
//! // render surfaces and swap again
|
||||||
//! evlh.state().get(backend).swap_buffers().unwrap();
|
//! state.into().get(backend).swap_buffers().unwrap();
|
||||||
//! }
|
//! }
|
||||||
//! fn error(&mut self,
|
//! fn error<'a, S: Into<StateProxy<'a>>>(
|
||||||
//! _: &mut EventLoopHandle,
|
//! &mut self,
|
||||||
//! device: &mut DrmDevice<DrmBackend>,
|
//! _state: S,
|
||||||
//! error: DrmError)
|
//! device: &mut DrmDevice<DrmBackend>,
|
||||||
|
//! error: DrmError)
|
||||||
//! {
|
//! {
|
||||||
//! panic!("DrmDevice errored: {}", error);
|
//! panic!("DrmDevice errored: {}", error);
|
||||||
//! }
|
//! }
|
||||||
|
@ -176,7 +180,8 @@
|
||||||
//! // render something (like clear_color)
|
//! // render something (like clear_color)
|
||||||
//! event_loop.state().get(&backend).swap_buffers().unwrap();
|
//! event_loop.state().get(&backend).swap_buffers().unwrap();
|
||||||
//!
|
//!
|
||||||
//! let _source = drm_device_bind(&mut event_loop, device, MyDrmHandler).unwrap();
|
//! let device_token = event_loop.state().insert(device);
|
||||||
|
//! let _source = drm_device_bind(&mut event_loop, device_token, MyDrmHandler).unwrap();
|
||||||
//!
|
//!
|
||||||
//! event_loop.run().unwrap();
|
//! event_loop.run().unwrap();
|
||||||
//! # }
|
//! # }
|
||||||
|
|
Loading…
Reference in New Issue