render: Don't use separate damage_output calls
This commit is contained in:
parent
eb41b076ed
commit
1c5ef576f4
2 changed files with 35 additions and 8 deletions
|
|
@ -43,6 +43,7 @@ where
|
|||
CropRenderElement<RelocateRenderElement<RescaleRenderElement<TextureShaderElement>>>,
|
||||
),
|
||||
Zoom(MemoryRenderBufferRenderElement<R>),
|
||||
Damage(DamageElement),
|
||||
#[cfg(feature = "debug")]
|
||||
Egui(TextureRenderElement<GlesTexture>),
|
||||
}
|
||||
|
|
@ -61,6 +62,7 @@ where
|
|||
CosmicElement::MoveGrab(elem) => elem.id(),
|
||||
CosmicElement::Postprocess(elem) => elem.id(),
|
||||
CosmicElement::Zoom(elem) => elem.id(),
|
||||
CosmicElement::Damage(elem) => elem.id(),
|
||||
#[cfg(feature = "debug")]
|
||||
CosmicElement::Egui(elem) => elem.id(),
|
||||
}
|
||||
|
|
@ -74,6 +76,7 @@ where
|
|||
CosmicElement::MoveGrab(elem) => elem.current_commit(),
|
||||
CosmicElement::Postprocess(elem) => elem.current_commit(),
|
||||
CosmicElement::Zoom(elem) => elem.current_commit(),
|
||||
CosmicElement::Damage(elem) => elem.current_commit(),
|
||||
#[cfg(feature = "debug")]
|
||||
CosmicElement::Egui(elem) => elem.current_commit(),
|
||||
}
|
||||
|
|
@ -87,6 +90,7 @@ where
|
|||
CosmicElement::MoveGrab(elem) => elem.src(),
|
||||
CosmicElement::Postprocess(elem) => elem.src(),
|
||||
CosmicElement::Zoom(elem) => elem.src(),
|
||||
CosmicElement::Damage(elem) => elem.src(),
|
||||
#[cfg(feature = "debug")]
|
||||
CosmicElement::Egui(elem) => elem.src(),
|
||||
}
|
||||
|
|
@ -100,6 +104,7 @@ where
|
|||
CosmicElement::MoveGrab(elem) => elem.geometry(scale),
|
||||
CosmicElement::Postprocess(elem) => elem.geometry(scale),
|
||||
CosmicElement::Zoom(elem) => elem.geometry(scale),
|
||||
CosmicElement::Damage(elem) => elem.geometry(scale),
|
||||
#[cfg(feature = "debug")]
|
||||
CosmicElement::Egui(elem) => elem.geometry(scale),
|
||||
}
|
||||
|
|
@ -113,6 +118,7 @@ where
|
|||
CosmicElement::MoveGrab(elem) => elem.location(scale),
|
||||
CosmicElement::Postprocess(elem) => elem.location(scale),
|
||||
CosmicElement::Zoom(elem) => elem.location(scale),
|
||||
CosmicElement::Damage(elem) => elem.location(scale),
|
||||
#[cfg(feature = "debug")]
|
||||
CosmicElement::Egui(elem) => elem.location(scale),
|
||||
}
|
||||
|
|
@ -126,6 +132,7 @@ where
|
|||
CosmicElement::MoveGrab(elem) => elem.transform(),
|
||||
CosmicElement::Postprocess(elem) => elem.transform(),
|
||||
CosmicElement::Zoom(elem) => elem.transform(),
|
||||
CosmicElement::Damage(elem) => elem.transform(),
|
||||
#[cfg(feature = "debug")]
|
||||
CosmicElement::Egui(elem) => elem.transform(),
|
||||
}
|
||||
|
|
@ -143,6 +150,7 @@ where
|
|||
CosmicElement::MoveGrab(elem) => elem.damage_since(scale, commit),
|
||||
CosmicElement::Postprocess(elem) => elem.damage_since(scale, commit),
|
||||
CosmicElement::Zoom(elem) => elem.damage_since(scale, commit),
|
||||
CosmicElement::Damage(elem) => elem.damage_since(scale, commit),
|
||||
#[cfg(feature = "debug")]
|
||||
CosmicElement::Egui(elem) => elem.damage_since(scale, commit),
|
||||
}
|
||||
|
|
@ -156,6 +164,7 @@ where
|
|||
CosmicElement::MoveGrab(elem) => elem.opaque_regions(scale),
|
||||
CosmicElement::Postprocess(elem) => elem.opaque_regions(scale),
|
||||
CosmicElement::Zoom(elem) => elem.opaque_regions(scale),
|
||||
CosmicElement::Damage(elem) => elem.opaque_regions(scale),
|
||||
#[cfg(feature = "debug")]
|
||||
CosmicElement::Egui(elem) => elem.opaque_regions(scale),
|
||||
}
|
||||
|
|
@ -169,6 +178,7 @@ where
|
|||
CosmicElement::MoveGrab(elem) => elem.alpha(),
|
||||
CosmicElement::Postprocess(elem) => elem.alpha(),
|
||||
CosmicElement::Zoom(elem) => elem.alpha(),
|
||||
CosmicElement::Damage(elem) => elem.alpha(),
|
||||
#[cfg(feature = "debug")]
|
||||
CosmicElement::Egui(elem) => elem.alpha(),
|
||||
}
|
||||
|
|
@ -182,6 +192,7 @@ where
|
|||
CosmicElement::MoveGrab(elem) => elem.kind(),
|
||||
CosmicElement::Postprocess(elem) => elem.kind(),
|
||||
CosmicElement::Zoom(elem) => elem.kind(),
|
||||
CosmicElement::Damage(elem) => elem.kind(),
|
||||
#[cfg(feature = "debug")]
|
||||
CosmicElement::Egui(elem) => elem.kind(),
|
||||
}
|
||||
|
|
@ -195,6 +206,7 @@ where
|
|||
CosmicElement::MoveGrab(elem) => elem.is_framebuffer_effect(),
|
||||
CosmicElement::Postprocess(elem) => elem.is_framebuffer_effect(),
|
||||
CosmicElement::Zoom(elem) => elem.is_framebuffer_effect(),
|
||||
CosmicElement::Damage(elem) => elem.is_framebuffer_effect(),
|
||||
#[cfg(feature = "debug")]
|
||||
CosmicElement::Egui(elem) => elem.is_framebuffer_effect(),
|
||||
}
|
||||
|
|
@ -241,6 +253,9 @@ where
|
|||
.map_err(R::from_gles_error)
|
||||
}
|
||||
CosmicElement::Zoom(elem) => elem.draw(frame, src, dst, damage, opaque_regions, cache),
|
||||
CosmicElement::Damage(elem) => {
|
||||
RenderElement::<R>::draw(elem, frame, src, dst, damage, opaque_regions, cache)
|
||||
}
|
||||
#[cfg(feature = "debug")]
|
||||
CosmicElement::Egui(elem) => {
|
||||
let glow_frame = R::glow_frame_mut(frame);
|
||||
|
|
@ -269,6 +284,7 @@ where
|
|||
elem.underlying_storage(glow_renderer)
|
||||
}
|
||||
CosmicElement::Zoom(elem) => elem.underlying_storage(renderer),
|
||||
CosmicElement::Damage(elem) => elem.underlying_storage(renderer),
|
||||
#[cfg(feature = "debug")]
|
||||
CosmicElement::Egui(elem) => {
|
||||
let glow_renderer = renderer.glow_renderer_mut();
|
||||
|
|
@ -297,6 +313,9 @@ where
|
|||
.map_err(R::from_gles_error)
|
||||
}
|
||||
CosmicElement::Zoom(elem) => elem.capture_framebuffer(frame, src, dst, cache),
|
||||
CosmicElement::Damage(elem) => {
|
||||
RenderElement::<R>::capture_framebuffer(elem, frame, src, dst, cache)
|
||||
}
|
||||
#[cfg(feature = "debug")]
|
||||
CosmicElement::Egui(elem) => {
|
||||
let glow_frame = R::glow_frame_mut(frame);
|
||||
|
|
@ -336,6 +355,17 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
impl<R> From<DamageElement> for CosmicElement<R>
|
||||
where
|
||||
R: Renderer + ImportAll + ImportMem + AsGlowRenderer,
|
||||
R::TextureId: 'static,
|
||||
CosmicMappedRenderElement<R>: RenderElement<R>,
|
||||
{
|
||||
fn from(value: DamageElement) -> Self {
|
||||
Self::Damage(value)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "debug")]
|
||||
impl<R> From<TextureRenderElement<GlesTexture>> for CosmicElement<R>
|
||||
where
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue