diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-03 21:21:58 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-03 21:23:32 +0400 |
| commit | 8ab50f9d1ca5795f4eef84ad423dc0d63d990b98 (patch) | |
| tree | 547387d5d17f565791abf9ec3b5bd863a1257162 /src/render_helpers/shaders | |
| parent | 5c32031111223cdfb7ad5e9c2766204445ac6492 (diff) | |
| download | niri-8ab50f9d1ca5795f4eef84ad423dc0d63d990b98.tar.gz niri-8ab50f9d1ca5795f4eef84ad423dc0d63d990b98.tar.bz2 niri-8ab50f9d1ca5795f4eef84ad423dc0d63d990b98.zip | |
shader_element: Store program type instead of shader
Diffstat (limited to 'src/render_helpers/shaders')
| -rw-r--r-- | src/render_helpers/shaders/mod.rs | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/src/render_helpers/shaders/mod.rs b/src/render_helpers/shaders/mod.rs index 5937fcc1..034d8db1 100644 --- a/src/render_helpers/shaders/mod.rs +++ b/src/render_helpers/shaders/mod.rs @@ -2,7 +2,8 @@ use std::cell::RefCell; use glam::Mat3; use smithay::backend::renderer::gles::{ - GlesError, GlesRenderer, GlesTexProgram, Uniform, UniformName, UniformType, UniformValue, + GlesError, GlesFrame, GlesRenderer, GlesTexProgram, Uniform, UniformName, UniformType, + UniformValue, }; use super::renderer::NiriRenderer; @@ -15,6 +16,12 @@ pub struct Shaders { pub custom_resize: RefCell<Option<ShaderProgram>>, } +#[derive(Debug, Clone, Copy)] +pub enum ProgramType { + Border, + Resize, +} + impl Shaders { fn compile(renderer: &mut GlesRenderer) -> Self { let _span = tracy_client::span!("Shaders::compile"); @@ -68,6 +75,12 @@ impl Shaders { } } + pub fn get_from_frame<'a>(frame: &'a mut GlesFrame<'_>) -> &'a Self { + let data = frame.egl_context().user_data(); + data.get() + .expect("shaders::init() must be called when creating the renderer") + } + pub fn get(renderer: &mut impl NiriRenderer) -> &Self { let renderer = renderer.as_gles_renderer(); let data = renderer.egl_context().user_data(); @@ -82,11 +95,15 @@ impl Shaders { self.custom_resize.replace(program) } - pub fn resize(&self) -> Option<ShaderProgram> { - self.custom_resize - .borrow() - .clone() - .or_else(|| self.resize.clone()) + pub fn program(&self, program: ProgramType) -> Option<ShaderProgram> { + match program { + ProgramType::Border => self.border.clone(), + ProgramType::Resize => self + .custom_resize + .borrow() + .clone() + .or_else(|| self.resize.clone()), + } } } |
