This commit is contained in:
2025-11-29 22:08:29 +01:00
parent 18d4e448b8
commit a56c449f35

View File

@@ -2,7 +2,6 @@
use std::cell::RefCell;
use std::collections::HashMap;
use std::time::Instant;
use glam::{Mat3, Vec2};
use niri_config::CornerRadius;
@@ -17,7 +16,7 @@ use smithay::backend::renderer::Texture;
use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size, Transform};
use crate::backend::tty::{TtyFrame, TtyRenderer, TtyRendererError};
use crate::render_helpers::blur::{get_rerender_at, EffectsFramebufffersUserData};
use crate::render_helpers::blur::EffectsFramebufffersUserData;
use crate::render_helpers::render_data::RendererData;
use crate::render_helpers::renderer::AsGlesFrame;
use crate::render_helpers::shaders::{mat3_uniform, Shaders};
@@ -32,7 +31,6 @@ enum BlurVariant {
True {
fx_buffers: EffectsFramebufffersUserData,
config: niri_config::Blur,
damage_at: RefCell<Option<Instant>>,
},
}
@@ -146,7 +144,6 @@ impl Blur {
BlurVariant::True {
fx_buffers: fx_buffers.clone(),
config: self.config,
damage_at: Default::default(),
}
} else {
BlurVariant::Optimized {
@@ -166,7 +163,6 @@ impl Blur {
BlurVariant::True {
fx_buffers: fx_buffers.clone(),
config: self.config,
damage_at: Default::default(),
}
} else {
BlurVariant::Optimized {
@@ -185,23 +181,12 @@ impl Blur {
&& inner.corner_radius == corner_radius
&& inner.render_loc == render_loc
{
let should_rerender = match &inner.variant {
BlurVariant::Optimized { texture }
if !matches!(&inner.variant, BlurVariant::Optimized { texture }
if texture.size().w == fx_buffers.output_size().w
&& texture.size().h == fx_buffers.output_size().h =>
{
false
}
BlurVariant::True {
damage_at: rerender_at,
..
} if rerender_at.borrow().is_none_or(|r| r > Instant::now()) => false,
_ => true,
};
if should_rerender {
&& texture.size().h == fx_buffers.output_size().h)
{
// If we are true blur, or if our output size changed, we need to re-render.
// TODO: is there a better solution for true blur?
// PERF: is there a better solution for true blur?
inner.damage_all();
}
@@ -436,13 +421,7 @@ impl RenderElement<GlesRenderer> for BlurRenderElement {
Some(&program),
&self.uniforms,
),
BlurVariant::True {
fx_buffers,
config,
damage_at,
} => {
damage_at.set(get_rerender_at());
BlurVariant::True { fx_buffers, config } => {
let mut fx_buffers = fx_buffers.borrow_mut();
fx_buffers.current_buffer = CurrentBuffer::Normal;