From a3cbe3514ba195bf74815008f75819944f888527 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Tue, 14 Jan 2025 21:21:30 +0300 Subject: clipped_surface: Store complete uniforms in the struct This mistake shall never happen again. --- src/render_helpers/clipped_surface.rs | 42 +++++++++++------------------------ 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/src/render_helpers/clipped_surface.rs b/src/render_helpers/clipped_surface.rs index b4697e98..f8d074e9 100644 --- a/src/render_helpers/clipped_surface.rs +++ b/src/render_helpers/clipped_surface.rs @@ -19,9 +19,7 @@ pub struct ClippedSurfaceRenderElement { program: GlesTexProgram, corner_radius: CornerRadius, geometry: Rectangle, - input_to_geo: Mat3, - // Should only be used for visual improvements, i.e. corner radius anti-aliasing. - scale: f32, + uniforms: Vec>, } #[derive(Debug, Default, Clone)] @@ -72,13 +70,19 @@ impl ClippedSurfaceRenderElement { * Mat3::from_scale(buf_size / src_size) * Mat3::from_translation(-src_loc / buf_size); + let uniforms = vec![ + Uniform::new("niri_scale", scale.x as f32), + Uniform::new("geo_size", (geometry.size.w as f32, geometry.size.h as f32)), + Uniform::new("corner_radius", <[f32; 4]>::from(corner_radius)), + mat3_uniform("input_to_geo", input_to_geo), + ]; + Self { inner: elem, program, corner_radius, geometry, - input_to_geo, - scale: scale.x as f32, + uniforms, } } @@ -220,18 +224,7 @@ impl RenderElement for ClippedSurfaceRenderElement { damage: &[Rectangle], opaque_regions: &[Rectangle], ) -> Result<(), GlesError> { - frame.override_default_tex_program( - self.program.clone(), - vec![ - Uniform::new("niri_scale", self.scale), - Uniform::new( - "geo_size", - (self.geometry.size.w as f32, self.geometry.size.h as f32), - ), - Uniform::new("corner_radius", <[f32; 4]>::from(self.corner_radius)), - mat3_uniform("input_to_geo", self.input_to_geo), - ], - ); + frame.override_default_tex_program(self.program.clone(), self.uniforms.clone()); RenderElement::::draw(&self.inner, frame, src, dst, damage, opaque_regions)?; frame.clear_tex_program_override(); Ok(()) @@ -255,18 +248,9 @@ impl<'render> RenderElement> damage: &[Rectangle], opaque_regions: &[Rectangle], ) -> Result<(), TtyRendererError<'render>> { - frame.as_gles_frame().override_default_tex_program( - self.program.clone(), - vec![ - Uniform::new("niri_scale", self.scale), - Uniform::new( - "geo_size", - (self.geometry.size.w as f32, self.geometry.size.h as f32), - ), - Uniform::new("corner_radius", <[f32; 4]>::from(self.corner_radius)), - mat3_uniform("input_to_geo", self.input_to_geo), - ], - ); + frame + .as_gles_frame() + .override_default_tex_program(self.program.clone(), self.uniforms.clone()); RenderElement::draw(&self.inner, frame, src, dst, damage, opaque_regions)?; frame.as_gles_frame().clear_tex_program_override(); Ok(()) -- cgit