aboutsummaryrefslogtreecommitdiff
path: root/src/render_helpers/shaders
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-05-03 21:21:58 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-05-03 21:23:32 +0400
commit8ab50f9d1ca5795f4eef84ad423dc0d63d990b98 (patch)
tree547387d5d17f565791abf9ec3b5bd863a1257162 /src/render_helpers/shaders
parent5c32031111223cdfb7ad5e9c2766204445ac6492 (diff)
downloadniri-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.rs29
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()),
+ }
}
}