diff options
Diffstat (limited to 'src/backend')
| -rw-r--r-- | src/backend/mod.rs | 13 | ||||
| -rw-r--r-- | src/backend/tty.rs | 25 | ||||
| -rw-r--r-- | src/backend/winit.rs | 15 |
3 files changed, 22 insertions, 31 deletions
diff --git a/src/backend/mod.rs b/src/backend/mod.rs index 05b898dc..2558d933 100644 --- a/src/backend/mod.rs +++ b/src/backend/mod.rs @@ -7,7 +7,6 @@ use smithay::backend::renderer::gles::GlesRenderer; use smithay::output::Output; use crate::input::CompositorMod; -use crate::niri::OutputRenderElements; use crate::Niri; pub mod tty; @@ -57,12 +56,11 @@ impl Backend { &mut self, niri: &mut Niri, output: &Output, - elements: &[OutputRenderElements<GlesRenderer>], target_presentation_time: Duration, ) -> RenderResult { match self { - Backend::Tty(tty) => tty.render(niri, output, elements, target_presentation_time), - Backend::Winit(winit) => winit.render(niri, output, elements), + Backend::Tty(tty) => tty.render(niri, output, target_presentation_time), + Backend::Winit(winit) => winit.render(niri, output), } } @@ -120,13 +118,6 @@ impl Backend { } } - pub fn is_active(&self) -> bool { - match self { - Backend::Tty(tty) => tty.is_active(), - Backend::Winit(_) => true, - } - } - pub fn set_monitors_active(&self, active: bool) { match self { Backend::Tty(tty) => tty.set_monitors_active(active), diff --git a/src/backend/tty.rs b/src/backend/tty.rs index 679073e5..89952192 100644 --- a/src/backend/tty.rs +++ b/src/backend/tty.rs @@ -40,7 +40,7 @@ use wayland_protocols::wp::presentation_time::server::wp_presentation_feedback; use super::RenderResult; use crate::config::Config; -use crate::niri::{OutputRenderElements, RedrawState, State}; +use crate::niri::{RedrawState, State}; use crate::utils::get_monotonic_time; use crate::Niri; @@ -868,7 +868,6 @@ impl Tty { &mut self, niri: &mut Niri, output: &Output, - elements: &[OutputRenderElements<GlesRenderer>], target_presentation_time: Duration, ) -> RenderResult { let span = tracy_client::span!("Tty::render"); @@ -880,6 +879,11 @@ impl Tty { return rv; }; + if !device.drm.is_active() { + warn!("device is inactive"); + return rv; + } + let tty_state: &TtyOutputState = output.user_data().get().unwrap(); let Some(surface) = device.surfaces.get_mut(&tty_state.crtc) else { error!("missing surface"); @@ -888,9 +892,14 @@ impl Tty { span.emit_text(&surface.name); + let renderer = &mut device.gles; + + // Render the elements. + let elements = niri.render(renderer, output, true); + + // Hand them over to the DRM. let drm_compositor = &mut surface.compositor; - match drm_compositor.render_frame::<_, _, GlesTexture>(&mut device.gles, elements, [0.; 4]) - { + match drm_compositor.render_frame::<_, _, GlesTexture>(renderer, &elements, [0.; 4]) { Ok(res) => { if self .config @@ -995,14 +1004,6 @@ impl Tty { self.output_device.as_ref().map(|d| d.gbm.clone()) } - pub fn is_active(&self) -> bool { - let Some(device) = &self.output_device else { - return false; - }; - - device.drm.is_active() - } - pub fn set_monitors_active(&self, active: bool) { let Some(device) = &self.output_device else { return; diff --git a/src/backend/winit.rs b/src/backend/winit.rs index 3adecd4b..0bda3984 100644 --- a/src/backend/winit.rs +++ b/src/backend/winit.rs @@ -19,7 +19,7 @@ use smithay::utils::Transform; use super::RenderResult; use crate::config::Config; -use crate::niri::{OutputRenderElements, RedrawState, State}; +use crate::niri::{RedrawState, State}; use crate::utils::get_monotonic_time; use crate::Niri; @@ -133,19 +133,18 @@ impl Winit { self.backend.renderer() } - pub fn render( - &mut self, - niri: &mut Niri, - output: &Output, - elements: &[OutputRenderElements<GlesRenderer>], - ) -> RenderResult { + pub fn render(&mut self, niri: &mut Niri, output: &Output) -> RenderResult { let _span = tracy_client::span!("Winit::render"); + // Render the elements. + let elements = niri.render(self.backend.renderer(), output, true); + + // Hand them over to winit. self.backend.bind().unwrap(); let age = self.backend.buffer_age().unwrap(); let res = self .damage_tracker - .render_output(self.backend.renderer(), age, elements, [0.; 4]) + .render_output(self.backend.renderer(), age, &elements, [0.; 4]) .unwrap(); niri.update_primary_scanout_output(output, &res.states); |
