aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-01-14 21:21:30 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-01-14 21:25:17 +0300
commita3cbe3514ba195bf74815008f75819944f888527 (patch)
tree9ffad087cc6071ba4319b5231a15ca5019b35f0b
parentefa7c862a44c92f74775b0e9eabbd616742a3d11 (diff)
downloadniri-a3cbe3514ba195bf74815008f75819944f888527.tar.gz
niri-a3cbe3514ba195bf74815008f75819944f888527.tar.bz2
niri-a3cbe3514ba195bf74815008f75819944f888527.zip
clipped_surface: Store complete uniforms in the struct
This mistake shall never happen again.
-rw-r--r--src/render_helpers/clipped_surface.rs42
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(())