chore(render): use Affine2 where possible

This commit is contained in:
Vukašin Vojinović 2026-07-20 15:57:59 +02:00 committed by Victoria Brekenfeld
parent 8955024bff
commit 60137c0d9e
5 changed files with 31 additions and 26 deletions

2
Cargo.lock generated
View file

@ -4819,7 +4819,7 @@ checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
[[package]] [[package]]
name = "smithay" name = "smithay"
version = "0.7.0" version = "0.7.0"
source = "git+https://github.com/smithay/smithay.git?rev=812bd33#812bd33259ff58810dadef6086d8385eeac1ca55" source = "git+https://github.com/smithay/smithay.git?rev=1ed69cb#1ed69cb55e9d0e9f38887c3b7d53d24365c4b14f"
dependencies = [ dependencies = [
"aliasable", "aliasable",
"appendlist", "appendlist",

View file

@ -144,4 +144,4 @@ lto = "fat"
cosmic-protocols = { git = "https://github.com/pop-os//cosmic-protocols", branch = "main" } cosmic-protocols = { git = "https://github.com/pop-os//cosmic-protocols", branch = "main" }
[patch.crates-io] [patch.crates-io]
smithay = { git = "https://github.com/smithay/smithay.git", rev = "812bd33" } smithay = { git = "https://github.com/smithay/smithay.git", rev = "1ed69cb" }

View file

@ -1,6 +1,6 @@
use std::{borrow::Borrow, cell::RefCell, collections::HashMap}; use std::{borrow::Borrow, cell::RefCell, collections::HashMap};
use glam::{Mat3, Vec2}; use glam::{Affine2, Mat3, Vec2};
use smithay::{ use smithay::{
backend::renderer::{ backend::renderer::{
element::Kind, element::Kind,
@ -117,18 +117,22 @@ impl ShadowShader {
let geo_loc = Vec2::new(-shader_geo.loc.x as f32, -shader_geo.loc.y as f32); let geo_loc = Vec2::new(-shader_geo.loc.x as f32, -shader_geo.loc.y as f32);
shader_geo.loc += offset + geo.loc; shader_geo.loc += offset + geo.loc;
let input_to_geo = Mat3::from_scale(area_size) let input_to_geo = Mat3::from(
* Mat3::from_translation(Vec2::new( Affine2::from_scale(area_size)
-geo_loc.x / area_size.x, * Affine2::from_translation(Vec2::new(
-geo_loc.y / area_size.y, -geo_loc.x / area_size.x,
)); -geo_loc.y / area_size.y,
)),
);
let window_geo_loc = Vec2::new(window_geo.loc.x as f32, window_geo.loc.y as f32); let window_geo_loc = Vec2::new(window_geo.loc.x as f32, window_geo.loc.y as f32);
let window_input_to_geo = Mat3::from_scale(area_size) let window_input_to_geo = Mat3::from(
* Mat3::from_translation(Vec2::new( Affine2::from_scale(area_size)
-window_geo_loc.x / area_size.x, * Affine2::from_translation(Vec2::new(
-window_geo_loc.y / area_size.y, -window_geo_loc.x / area_size.x,
)); -window_geo_loc.y / area_size.y,
)),
);
let element = PixelShaderElement::new( let element = PixelShaderElement::new(
shader, shader,

View file

@ -3,7 +3,7 @@ use std::{
sync::{LazyLock, Mutex}, sync::{LazyLock, Mutex},
}; };
use glam::{Mat3, Vec2}; use glam::{Affine2, Mat3, Vec2};
use smithay::{ use smithay::{
backend::{ backend::{
allocator::Fourcc, allocator::Fourcc,
@ -231,16 +231,16 @@ impl BlurElement {
// compute input_to_geo so that it crops the extended capture radius // compute input_to_geo so that it crops the extended capture radius
let geo_scale = { let geo_scale = {
let Scale { x, y } = geo.size / extended_geo.size; let Scale { x, y } = geo.size / extended_geo.size;
Mat3::from_scale(Vec2::new(x as f32, y as f32)).inverse() Affine2::from_scale(Vec2::new(x as f32, y as f32)).inverse()
}; };
let geo_translation = { let geo_translation = {
let offset = geo.loc - extended_geo.loc; let offset = geo.loc - extended_geo.loc;
Mat3::from_translation(-Vec2::new( Affine2::from_translation(-Vec2::new(
(offset.x / extended_geo.size.w) as f32, (offset.x / extended_geo.size.w) as f32,
(offset.y / extended_geo.size.h) as f32, (offset.y / extended_geo.size.h) as f32,
)) ))
}; };
let input_to_geo = geo_scale * geo_translation; let input_to_geo = Mat3::from(geo_scale * geo_translation);
let uniforms = vec![ let uniforms = vec![
Uniform::new("geo_size", (geometry.size.w as f32, geometry.size.h as f32)), Uniform::new("geo_size", (geometry.size.w as f32, geometry.size.h as f32)),

View file

@ -2,7 +2,7 @@
use std::borrow::{Borrow, BorrowMut}; use std::borrow::{Borrow, BorrowMut};
use glam::{Mat3, Vec2}; use glam::{Affine2, Mat3, Vec2};
use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size, Transform}; use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size, Transform};
use smithay::{ use smithay::{
backend::renderer::{ backend::renderer::{
@ -63,18 +63,18 @@ where
let view = elem.view(); let view = elem.view();
let transform = elem.transform(); let transform = elem.transform();
let transform_matrix = Mat3::from_translation(Vec2::new(0.5, 0.5)) let transform_matrix = Affine2::from_translation(Vec2::new(0.5, 0.5))
* transform.matrix() * transform.matrix()
* Mat3::from_translation(-Vec2::new(0.5, 0.5)); * Affine2::from_translation(-Vec2::new(0.5, 0.5));
let geo_scale = { let geo_scale = {
let Scale { x, y } = elem_geo.size.to_f64() / geo.size.to_f64(); let Scale { x, y } = elem_geo.size.to_f64() / geo.size.to_f64();
Mat3::from_scale(Vec2::new(x as f32, y as f32)) Affine2::from_scale(Vec2::new(x as f32, y as f32))
}; };
let geo_translation = { let geo_translation = {
let offset = (elem_geo.loc - geo.loc).to_f64(); let offset = (elem_geo.loc - geo.loc).to_f64();
Mat3::from_translation(Vec2::new( Affine2::from_translation(Vec2::new(
(offset.x / elem_geo.size.w as f64) as f32, (offset.x / elem_geo.size.w as f64) as f32,
(offset.y / elem_geo.size.h as f64) as f32, (offset.y / elem_geo.size.h as f64) as f32,
)) ))
@ -82,16 +82,17 @@ where
let buf_scale = { let buf_scale = {
let Scale { x, y } = buf_size.to_f64() / view.src.size.to_f64(); let Scale { x, y } = buf_size.to_f64() / view.src.size.to_f64();
Mat3::from_scale(Vec2::new(x as f32, y as f32)) Affine2::from_scale(Vec2::new(x as f32, y as f32))
}; };
let buf_translation = Mat3::from_translation(Vec2::new( let buf_translation = Affine2::from_translation(Vec2::new(
(view.src.loc.x / buf_size.w as f64) as f32, (view.src.loc.x / buf_size.w as f64) as f32,
(view.src.loc.y / buf_size.h as f64) as f32, (view.src.loc.y / buf_size.h as f64) as f32,
)); ));
let input_to_geo = let input_to_geo = Mat3::from(
transform_matrix * geo_scale * geo_translation * buf_scale * buf_translation; transform_matrix * geo_scale * geo_translation * buf_scale * buf_translation,
);
let uniforms = vec![ let uniforms = vec![
Uniform::new("geo_size", (geometry.size.w as f32, geometry.size.h as f32)), Uniform::new("geo_size", (geometry.size.w as f32, geometry.size.h as f32)),