shaders: Add drop-shadow shader

This commit is contained in:
Victoria Brekenfeld 2025-12-08 17:59:24 +01:00 committed by Victoria Brekenfeld
parent 2f39c9682c
commit 94d49210e6
3 changed files with 338 additions and 0 deletions

View file

@ -17,6 +17,7 @@ use crate::{
render::{
clipped_surface::{CLIPPING_SHADER, ClippingShader},
element::DamageElement,
shadow::{SHADOW_SHADER, ShadowShader},
},
},
config::ScreenFilter,
@ -84,6 +85,7 @@ pub mod animations;
pub mod clipped_surface;
pub mod cursor;
pub mod element;
pub mod shadow;
use self::element::{AsGlowRenderer, CosmicElement};
use super::kms::Timings;
@ -414,6 +416,19 @@ pub fn init_shaders(renderer: &mut GlesRenderer) -> Result<(), GlesError> {
UniformName::new("input_to_geo", UniformType::Matrix3x3),
],
)?;
let shadow_shader = renderer.compile_custom_pixel_shader(
SHADOW_SHADER,
&[
UniformName::new("shadow_color", UniformType::_4f),
UniformName::new("sigma", UniformType::_1f),
UniformName::new("input_to_geo", UniformType::Matrix3x3),
UniformName::new("geo_size", UniformType::_2f),
UniformName::new("corner_radius", UniformType::_4f),
UniformName::new("window_input_to_geo", UniformType::Matrix3x3),
UniformName::new("window_geo_size", UniformType::_2f),
UniformName::new("window_corner_radius", UniformType::_4f),
],
)?;
let egl_context = renderer.egl_context();
egl_context
@ -428,6 +443,9 @@ pub fn init_shaders(renderer: &mut GlesRenderer) -> Result<(), GlesError> {
egl_context
.user_data()
.insert_if_missing(|| ClippingShader(clipping_shader));
egl_context
.user_data()
.insert_if_missing(|| ShadowShader(shadow_shader));
Ok(())
}