shaders: Add clipped-surface shader

This commit is contained in:
Victoria Brekenfeld 2025-12-08 17:58:38 +01:00 committed by Victoria Brekenfeld
parent ea429a778e
commit 2f39c9682c
5 changed files with 369 additions and 2 deletions

View file

@ -12,7 +12,13 @@ use std::{
#[cfg(feature = "debug")]
use crate::debug::fps_ui;
use crate::{
backend::{kms::render::gles::GbmGlowBackend, render::element::DamageElement},
backend::{
kms::render::gles::GbmGlowBackend,
render::{
clipped_surface::{CLIPPING_SHADER, ClippingShader},
element::DamageElement,
},
},
config::ScreenFilter,
shell::{
CosmicMappedRenderElement, OverviewMode, SeatExt, Trigger, WorkspaceDelta,
@ -75,7 +81,7 @@ use smithay::{
use smithay_egui::EguiState;
pub mod animations;
pub mod clipped_surface;
pub mod cursor;
pub mod element;
use self::element::{AsGlowRenderer, CosmicElement};
@ -400,6 +406,14 @@ pub fn init_shaders(renderer: &mut GlesRenderer) -> Result<(), GlesError> {
UniformName::new("color_mode", UniformType::_1f),
],
)?;
let clipping_shader = renderer.compile_custom_texture_shader(
CLIPPING_SHADER,
&[
UniformName::new("geo_size", UniformType::_2f),
UniformName::new("corner_radius", UniformType::_4f),
UniformName::new("input_to_geo", UniformType::Matrix3x3),
],
)?;
let egl_context = renderer.egl_context();
egl_context
@ -411,6 +425,9 @@ pub fn init_shaders(renderer: &mut GlesRenderer) -> Result<(), GlesError> {
egl_context
.user_data()
.insert_if_missing(|| PostprocessShader(postprocess_shader));
egl_context
.user_data()
.insert_if_missing(|| ClippingShader(clipping_shader));
Ok(())
}