diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-01-03 11:22:11 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-01-03 11:37:04 +0400 |
| commit | dae93ee1598b3f80e2904de26508b8d9da076219 (patch) | |
| tree | 04656692a75ddd99f5e40feb51e141b5193e0cde /src | |
| parent | 57a73476207bd33a26b39964feb01bb673be8a2b (diff) | |
| download | niri-dae93ee1598b3f80e2904de26508b8d9da076219.tar.gz niri-dae93ee1598b3f80e2904de26508b8d9da076219.tar.bz2 niri-dae93ee1598b3f80e2904de26508b8d9da076219.zip | |
Render again for screencast
Will be needed when multi-gpu support is added.
Diffstat (limited to 'src')
| -rw-r--r-- | src/niri.rs | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/niri.rs b/src/niri.rs index 043c0d67..4f9043a4 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -1745,7 +1745,7 @@ impl Niri { let renderer = backend .renderer() .expect("renderer must not have disappeared"); - self.send_for_screen_cast(renderer, output, &elements, target_presentation_time); + self.render_for_screen_cast(renderer, output, target_presentation_time); } } @@ -2024,19 +2024,21 @@ impl Niri { } #[cfg(feature = "xdp-gnome-screencast")] - fn send_for_screen_cast( + fn render_for_screen_cast( &mut self, renderer: &mut GlesRenderer, output: &Output, - elements: &[OutputRenderElements<GlesRenderer>], target_presentation_time: Duration, ) { - let _span = tracy_client::span!("Niri::send_for_screen_cast"); + let _span = tracy_client::span!("Niri::render_for_screen_cast"); let size = output.current_mode().unwrap().size; let scale = Scale::from(output.current_scale().fractional_scale()); - for cast in &mut self.casts { + let mut elements = None; + + let mut casts = mem::take(&mut self.casts); + for cast in &mut casts { if !cast.is_active.get() { continue; } @@ -2082,6 +2084,8 @@ impl Niri { let dmabuf = cast.dmabufs.borrow()[&fd].clone(); // FIXME: Hidden / embedded / metadata cursor + let elements = elements.get_or_insert_with(|| self.render(renderer, output, true)); + if let Err(err) = render_to_dmabuf(renderer, dmabuf, size, scale, elements) { error!("error rendering to dmabuf: {err:?}"); continue; @@ -2095,6 +2099,7 @@ impl Niri { cast.last_frame_time = target_presentation_time; } + self.casts = casts; } #[cfg(feature = "xdp-gnome-screencast")] |
