render: Don't use separate damage_output calls

This commit is contained in:
Victoria Brekenfeld 2026-03-10 17:10:38 +01:00 committed by Victoria Brekenfeld
parent eb41b076ed
commit 1c5ef576f4
2 changed files with 35 additions and 8 deletions

View file

@ -1,7 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
use calloop::LoopHandle;
use smallvec::SmallVec;
use smithay::{
backend::{
allocator::{Buffer, Fourcc, format::get_transparent},
@ -506,6 +505,7 @@ smithay::render_elements! {
pub WindowCaptureElement<R> where R: ImportAll + ImportMem + AsGlowRenderer;
WaylandElement=SurfaceRenderElement<R>,
CursorElement=RelocateRenderElement<cursor::CursorRenderElement<R>>,
DamageElement=DamageElement,
}
pub fn render_window_to_buffer(
@ -556,7 +556,7 @@ pub fn render_window_to_buffer(
CosmicElement<R>: RenderElement<R>,
CosmicMappedRenderElement<R>: RenderElement<R>,
{
let additional_damage_elements: Vec<_> = additional_damage
let mut elements: Vec<_> = additional_damage
.into_iter()
.filter_map(|rect| {
let logical_rect = rect.to_logical(
@ -567,8 +567,8 @@ pub fn render_window_to_buffer(
logical_rect.intersection(Rectangle::from_size(geometry.size))
})
.map(DamageElement::new)
.map(WindowCaptureElement::<R>::from)
.collect();
dt.damage_output(age, &additional_damage_elements)?;
let shell = common.shell.read();
let seat = shell.seats.last_active().clone();
@ -589,8 +589,6 @@ pub fn render_window_to_buffer(
};
std::mem::drop(shell);
let mut elements = Vec::new();
if let Some(location) = location {
if draw_cursor {
cursor::draw_cursor(
@ -802,17 +800,16 @@ pub fn render_cursor_to_buffer(
CosmicElement<R>: RenderElement<R>,
CosmicMappedRenderElement<R>: RenderElement<R>,
{
let additional_damage_elements: Vec<_> = additional_damage
let mut elements: Vec<_> = additional_damage
.into_iter()
.filter_map(|rect| {
let logical_rect = rect.to_logical(1, Transform::Normal, &Size::from((64, 64)));
logical_rect.intersection(Rectangle::from_size((64, 64).into()))
})
.map(DamageElement::new)
.map(WindowCaptureElement::from)
.collect();
dt.damage_output(age, &additional_damage_elements)?;
let mut elements = SmallVec::<[WindowCaptureElement<R>; 4]>::new_const();
cursor::draw_cursor(
renderer,
seat,