aboutsummaryrefslogtreecommitdiff
path: root/src/render_helpers/shaders/mod.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-04-22 19:05:11 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-04-22 19:05:11 +0400
commit1681ed16d91757d98dc3eb653b970e706ff84b78 (patch)
treeb7822a2b49ecc4f9824b28c3b6c93d50ac2e01eb /src/render_helpers/shaders/mod.rs
parentd4bed7088441f76eb92d35e53c3af4301c6e01d3 (diff)
downloadniri-1681ed16d91757d98dc3eb653b970e706ff84b78.tar.gz
niri-1681ed16d91757d98dc3eb653b970e706ff84b78.tar.bz2
niri-1681ed16d91757d98dc3eb653b970e706ff84b78.zip
Change custom-shader to a prelude-epilogue system
Diffstat (limited to 'src/render_helpers/shaders/mod.rs')
-rw-r--r--src/render_helpers/shaders/mod.rs66
1 files changed, 33 insertions, 33 deletions
diff --git a/src/render_helpers/shaders/mod.rs b/src/render_helpers/shaders/mod.rs
index 040cf503..f03e168a 100644
--- a/src/render_helpers/shaders/mod.rs
+++ b/src/render_helpers/shaders/mod.rs
@@ -1,6 +1,8 @@
use std::cell::RefCell;
-use smithay::backend::renderer::gles::{GlesPixelProgram, GlesRenderer, UniformName, UniformType};
+use smithay::backend::renderer::gles::{
+ GlesError, GlesPixelProgram, GlesRenderer, UniformName, UniformType,
+};
use super::primary_gpu_pixel_shader_with_textures::PixelWithTexturesProgram;
use super::renderer::NiriRenderer;
@@ -31,24 +33,11 @@ impl Shaders {
})
.ok();
- let resize = PixelWithTexturesProgram::compile(
- renderer,
- include_str!("resize.frag"),
- &[
- UniformName::new("input_to_curr_geo", UniformType::Matrix3x3),
- UniformName::new("input_to_prev_geo", UniformType::Matrix3x3),
- UniformName::new("input_to_next_geo", UniformType::Matrix3x3),
- UniformName::new("geo_to_tex_prev", UniformType::Matrix3x3),
- UniformName::new("geo_to_tex_next", UniformType::Matrix3x3),
- UniformName::new("progress", UniformType::_1f),
- UniformName::new("clamped_progress", UniformType::_1f),
- ],
- &["tex_prev", "tex_next"],
- )
- .map_err(|err| {
- warn!("error compiling resize shader: {err:?}");
- })
- .ok();
+ let resize = compile_resize_program(renderer, include_str!("resize.frag"))
+ .map_err(|err| {
+ warn!("error compiling resize shader: {err:?}");
+ })
+ .ok();
Self {
gradient_border,
@@ -87,22 +76,33 @@ pub fn init(renderer: &mut GlesRenderer) {
}
}
+fn compile_resize_program(
+ renderer: &mut GlesRenderer,
+ src: &str,
+) -> Result<PixelWithTexturesProgram, GlesError> {
+ let mut program = include_str!("resize-prelude.frag").to_string();
+ program.push_str(src);
+ program.push_str(include_str!("resize-epilogue.frag"));
+
+ PixelWithTexturesProgram::compile(
+ renderer,
+ &program,
+ &[
+ UniformName::new("niri_input_to_curr_geo", UniformType::Matrix3x3),
+ UniformName::new("niri_curr_geo_to_prev_geo", UniformType::Matrix3x3),
+ UniformName::new("niri_curr_geo_to_next_geo", UniformType::Matrix3x3),
+ UniformName::new("niri_geo_to_tex_prev", UniformType::Matrix3x3),
+ UniformName::new("niri_geo_to_tex_next", UniformType::Matrix3x3),
+ UniformName::new("niri_progress", UniformType::_1f),
+ UniformName::new("niri_clamped_progress", UniformType::_1f),
+ ],
+ &["niri_tex_prev", "niri_tex_next"],
+ )
+}
+
pub fn set_custom_resize_program(renderer: &mut GlesRenderer, src: Option<&str>) {
let program = if let Some(src) = src {
- match PixelWithTexturesProgram::compile(
- renderer,
- src,
- &[
- UniformName::new("input_to_curr_geo", UniformType::Matrix3x3),
- UniformName::new("input_to_prev_geo", UniformType::Matrix3x3),
- UniformName::new("input_to_next_geo", UniformType::Matrix3x3),
- UniformName::new("geo_to_tex_prev", UniformType::Matrix3x3),
- UniformName::new("geo_to_tex_next", UniformType::Matrix3x3),
- UniformName::new("progress", UniformType::_1f),
- UniformName::new("clamped_progress", UniformType::_1f),
- ],
- &["tex_prev", "tex_next"],
- ) {
+ match compile_resize_program(renderer, src) {
Ok(program) => Some(program),
Err(err) => {
warn!("error compiling custom resize shader: {err:?}");