diff --git a/src/backend/wayland/compositor/state.rs b/src/backend/wayland/compositor/state.rs index a89cde6d..3d1be67d 100644 --- a/src/backend/wayland/compositor/state.rs +++ b/src/backend/wayland/compositor/state.rs @@ -305,6 +305,15 @@ impl WaylandState { } } + pub fn bind_egl_to_display(&self, renderer: &mut R) + where + R: smithay::backend::renderer::ImportEgl, + { + if let Err(err) = renderer.bind_wl_display(&self.display_handle) { + log::warn!("failed to bind egl to wayland display: {}", err); + } + } + pub fn init_dmabuf_global(&mut self, formats: Vec, egl_display: Option<&EGLDisplay>) { if self.dmabuf_global.is_some() { return; diff --git a/src/wayland/runtime/drm.rs b/src/wayland/runtime/drm.rs index 3befa173..7ac5d864 100644 --- a/src/wayland/runtime/drm.rs +++ b/src/wayland/runtime/drm.rs @@ -72,6 +72,11 @@ pub fn run() -> ! { crate::runtime::init_keyboard_layout(&mut state.wm); state.init_dmabuf_global(dmabuf_formats, Some(&egl_display)); + + state.with_renderer(|state, renderer| { + state.bind_egl_to_display(renderer); + }); + state.init_screencopy_manager(); let cursor_manager = init_cursor_manager(&state.cursor_config); diff --git a/src/wayland/runtime/winit.rs b/src/wayland/runtime/winit.rs index 90c1e48a..132a80e3 100644 --- a/src/wayland/runtime/winit.rs +++ b/src/wayland/runtime/winit.rs @@ -53,6 +53,9 @@ pub fn run() -> ! { crate::runtime::init_keyboard_layout(&mut state.wm); state.init_dmabuf_global(dmabuf_formats, Some(&egl_display)); + + state.bind_egl_to_display(backend.renderer()); + state.init_screencopy_manager(); let output_size = backend.window_size();