diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-01-14 21:21:30 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-01-14 21:25:17 +0300 |
| commit | a3cbe3514ba195bf74815008f75819944f888527 (patch) | |
| tree | 9ffad087cc6071ba4319b5231a15ca5019b35f0b /src | |
| parent | efa7c862a44c92f74775b0e9eabbd616742a3d11 (diff) | |
| download | niri-a3cbe3514ba195bf74815008f75819944f888527.tar.gz niri-a3cbe3514ba195bf74815008f75819944f888527.tar.bz2 niri-a3cbe3514ba195bf74815008f75819944f888527.zip | |
clipped_surface: Store complete uniforms in the struct
This mistake shall never happen again.
Diffstat (limited to 'src')
| -rw-r--r-- | src/render_helpers/clipped_surface.rs | 42 |
1 files 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<R: NiriRenderer> { program: GlesTexProgram, corner_radius: CornerRadius, geometry: Rectangle<f64, Logical>, - input_to_geo: Mat3, - // Should only be used for visual improvements, i.e. corner radius anti-aliasing. - scale: f32, + uniforms: Vec<Uniform<'static>>, } #[derive(Debug, Default, Clone)] @@ -72,13 +70,19 @@ impl<R: NiriRenderer> ClippedSurfaceRenderElement<R> { * 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<GlesRenderer> for ClippedSurfaceRenderElement<GlesRenderer> { damage: &[Rectangle<i32, Physical>], opaque_regions: &[Rectangle<i32, Physical>], ) -> 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::<GlesRenderer>::draw(&self.inner, frame, src, dst, damage, opaque_regions)?; frame.clear_tex_program_override(); Ok(()) @@ -255,18 +248,9 @@ impl<'render> RenderElement<TtyRenderer<'render>> damage: &[Rectangle<i32, Physical>], opaque_regions: &[Rectangle<i32, Physical>], ) -> 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(()) |
