diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-04-10 08:53:35 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-04-10 09:14:04 +0400 |
| commit | 18886965673e3f9d5faec0bafd09f68be2d9db45 (patch) | |
| tree | 4cfc7fbf7c5b9b87fca7c47e672a6c47cc06855a /src/layout/mod.rs | |
| parent | b9e789619f91d4b542618cb19b0fa27cd2e052c7 (diff) | |
| download | niri-18886965673e3f9d5faec0bafd09f68be2d9db45.tar.gz niri-18886965673e3f9d5faec0bafd09f68be2d9db45.tar.bz2 niri-18886965673e3f9d5faec0bafd09f68be2d9db45.zip | |
Reimplement window closing anim in an efficient way
- Keep a root surface cache to be accessible in surface destroyed()
- Only snapshot during / right before closing, rather than every frame
- Store textures rather than elements to handle scale and alpha properly
Diffstat (limited to 'src/layout/mod.rs')
| -rw-r--r-- | src/layout/mod.rs | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 18870025..073ae804 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -36,10 +36,11 @@ use std::time::Duration; use niri_config::{CenterFocusedColumn, Config, Struts}; use niri_ipc::SizeChange; -use smithay::backend::renderer::element::solid::SolidColorRenderElement; +use smithay::backend::renderer::element::solid::{SolidColorBuffer, SolidColorRenderElement}; use smithay::backend::renderer::element::surface::WaylandSurfaceRenderElement; +use smithay::backend::renderer::element::texture::TextureBuffer; use smithay::backend::renderer::element::Id; -use smithay::backend::renderer::gles::GlesRenderer; +use smithay::backend::renderer::gles::{GlesRenderer, GlesTexture}; use smithay::output::Output; use smithay::reexports::wayland_server::protocol::wl_surface::WlSurface; use smithay::utils::{Logical, Point, Scale, Size, Transform}; @@ -48,9 +49,8 @@ use self::monitor::Monitor; pub use self::monitor::MonitorRenderElement; use self::workspace::{compute_working_area, Column, ColumnWidth, OutputId, Workspace}; use crate::niri_render_elements; -use crate::render_helpers::primary_gpu_texture::PrimaryGpuTextureRenderElement; use crate::render_helpers::renderer::NiriRenderer; -use crate::render_helpers::{RenderSnapshot, RenderTarget}; +use crate::render_helpers::{BakedBuffer, RenderSnapshot, RenderTarget}; use crate::utils::output_size; use crate::window::ResolvedWindowRules; @@ -67,12 +67,8 @@ niri_render_elements! { } } -niri_render_elements! { - LayoutElementSnapshotRenderElements => { - Texture = PrimaryGpuTextureRenderElement, - SolidColor = SolidColorRenderElement, - } -} +pub type LayoutElementRenderSnapshot = + RenderSnapshot<BakedBuffer<TextureBuffer<GlesTexture>>, BakedBuffer<SolidColorBuffer>>; pub trait LayoutElement { /// Type that can be used as a unique ID of this element. @@ -110,7 +106,7 @@ pub trait LayoutElement { target: RenderTarget, ) -> Vec<LayoutElementRenderElement<R>>; - fn take_last_render(&self) -> RenderSnapshot<LayoutElementSnapshotRenderElements>; + fn take_last_render(&self) -> LayoutElementRenderSnapshot; fn request_size(&self, size: Size<i32, Logical>); fn request_fullscreen(&self, size: Size<i32, Logical>); @@ -1930,7 +1926,7 @@ mod tests { vec![] } - fn take_last_render(&self) -> RenderSnapshot<LayoutElementSnapshotRenderElements> { + fn take_last_render(&self) -> LayoutElementRenderSnapshot { RenderSnapshot::default() } |
