Render again for screencast

Will be needed when multi-gpu support is added.
This commit is contained in:
Ivan Molodetskikh
2024-01-03 11:22:11 +04:00
parent 57a7347620
commit dae93ee159
+10 -5
View File
@@ -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")]