diff --git a/src/wayland/shaders/shader_unlit_gamma.hlsl b/src/wayland/shaders/shader_unlit_gamma.hlsl index 13459b7..3e63104 100644 --- a/src/wayland/shaders/shader_unlit_gamma.hlsl +++ b/src/wayland/shaders/shader_unlit_gamma.hlsl @@ -28,7 +28,7 @@ psIn vs(vsIn input, uint id : SV_InstanceID) { float3 world = mul(float4(input.pos.xyz, 1), sk_inst[id].world).xyz; o.pos = mul(float4(world, 1), sk_viewproj[o.view_id]); - o.uv = (input.uv) + uv_offset * uv_scale; + o.uv = (input.uv + uv_offset) * uv_scale; return o; } float4 ps(psIn input) : SV_TARGET { diff --git a/src/wayland/shaders/shader_unlit_gamma.sks b/src/wayland/shaders/shader_unlit_gamma.sks index 194b067..96bec3e 100644 Binary files a/src/wayland/shaders/shader_unlit_gamma.sks and b/src/wayland/shaders/shader_unlit_gamma.sks differ diff --git a/src/wayland/shaders/shader_unlit_simula.hlsl b/src/wayland/shaders/shader_unlit_simula.hlsl index a27c063..f68a4ba 100644 --- a/src/wayland/shaders/shader_unlit_simula.hlsl +++ b/src/wayland/shaders/shader_unlit_simula.hlsl @@ -4,19 +4,19 @@ //--name = stardust/text_shader //--diffuse = white -//--fcFactor = 1.0 -//--ripple = 4.0 //--uv_offset = 0.0, 0.0 //--uv_scale = 1.0, 1.0 +//--fcFactor = 1.0 +//--ripple = 4.0 //--alpha_min = 0.0 //--alpha_max = 1.0 Texture2D diffuse : register(t0); SamplerState diffuse_s : register(s0); float4 diffuse_i; -float fcFactor; -float ripple; float2 uv_scale; float2 uv_offset; +float fcFactor; +float ripple; float alpha_min; float alpha_max; @@ -39,7 +39,7 @@ psIn vs(vsIn input, uint id : SV_InstanceID) { float3 world = mul(float4(input.pos.xyz, 1), sk_inst[id].world).xyz; o.pos = mul(float4(world, 1), sk_viewproj[o.view_id]); - o.uv = (input.uv) + uv_offset * uv_scale; + o.uv = (input.uv + uv_offset) * uv_scale; return o; } diff --git a/src/wayland/shaders/shader_unlit_simula.sks b/src/wayland/shaders/shader_unlit_simula.sks index 2a5e526..736b617 100644 Binary files a/src/wayland/shaders/shader_unlit_simula.sks and b/src/wayland/shaders/shader_unlit_simula.sks differ diff --git a/src/wayland/surface.rs b/src/wayland/surface.rs index 8aed635..ed4dd8e 100644 --- a/src/wayland/surface.rs +++ b/src/wayland/surface.rs @@ -3,7 +3,6 @@ use crate::{ core::{delta::Delta, destroy_queue, registry::Registry}, nodes::drawable::model::Model, }; -use glam::vec2; use mint::Vector2; use once_cell::sync::OnceCell; use parking_lot::Mutex; @@ -67,7 +66,7 @@ pub struct CoreSurface { sk_tex: OnceCell>, sk_mat: OnceCell>>, material_offset: Mutex>, - geometry: Mutex>, + // geometry: Mutex>>, pub pending_material_applications: Mutex, u32)>>, } @@ -78,6 +77,9 @@ impl CoreSurface { surface: &WlSurface, ) { compositor::with_states(surface, |data| { + // let mut geometry: Delta> = + // Delta::new(data.data_map.get::().cloned()); + // geometry.mark_changed(); data.data_map.insert_if_missing_threadsafe(|| { CORE_SURFACES.add(CoreSurface { display: Arc::downgrade(display), @@ -87,10 +89,7 @@ impl CoreSurface { sk_tex: OnceCell::new(), sk_mat: OnceCell::new(), material_offset: Mutex::new(Delta::new(0)), - geometry: Mutex::new(Delta::new(SurfaceGeometry { - origin: [0; 2].into(), - size: [0; 2].into(), - })), + // geometry: Mutex::new(geometry), pending_material_applications: Mutex::new(Vec::new()), }) }); @@ -147,11 +146,12 @@ impl CoreSurface { self.with_states(|data| { // let just_mapped = mapped_data.is_none(); // if just_mapped { - let smithay_tex = data + let renderer_surface_state = data .data_map .get::() .unwrap() - .borrow() + .borrow(); + let smithay_tex = renderer_surface_state .texture::(renderer.id()) .unwrap() .clone(); @@ -173,16 +173,25 @@ impl CoreSurface { if let Some(material_offset) = self.material_offset.lock().delta() { sk_mat.set_queue_offset(*material_offset as i32); } - if let Some(geometry) = self.geometry.lock().delta() { - let tex_size = vec2(smithay_tex.width() as f32, smithay_tex.height() as f32); - let geometry_origin = vec2(geometry.origin.x as f32, geometry.origin.y as f32); - let geometry_size = vec2(geometry.size.x as f32, geometry.size.y as f32); - sk_mat.set_parameter("uv_offset", &Vector2::from(geometry_origin / tex_size)); - sk_mat.set_parameter("uv_scale", &Vector2::from(geometry_size / tex_size)); - } + // if let Some(geometry) = self.geometry.lock().delta().cloned().unwrap_or_default() { + // let buffer_size = renderer_surface_state.buffer_size().unwrap(); + // let surface_size = dbg!(vec2(buffer_size.w as f32, buffer_size.h as f32)); + // let geometry_origin = + // dbg!(vec2(geometry.origin.x as f32, geometry.origin.y as f32)); + // let geometry_size = dbg!(vec2(geometry.size.x as f32, geometry.size.y as f32)); + // sk_mat.set_parameter( + // "uv_offset", + // &Vector2::from(dbg!(geometry_origin / surface_size)), + // ); + // sk_mat.set_parameter( + // "uv_scale", + // &Vector2::from(dbg!(geometry_size / surface_size)), + // ); + // } + let surface_size = renderer_surface_state.surface_size().unwrap(); let new_mapped_data = CoreSurfaceData { - size: Vector2::from([smithay_tex.width(), smithay_tex.height()]), + size: Vector2::from([surface_size.w as u32, surface_size.h as u32]), wl_tex: Some(SendWrapper::new(smithay_tex)), }; *mapped_data = Some(new_mapped_data); @@ -207,9 +216,9 @@ impl CoreSurface { *self.material_offset.lock().value_mut() = material_offset; } - pub fn set_geometry(&self, geometry: SurfaceGeometry) { - *self.geometry.lock().value_mut() = geometry; - } + // pub fn set_geometry(&self, geometry: SurfaceGeometry) { + // *self.geometry.lock().value_mut() = Some(geometry); + // } pub fn apply_material(&self, model: Arc, material_idx: u32) { self.pending_material_applications diff --git a/src/wayland/xdg_shell.rs b/src/wayland/xdg_shell.rs index 152b72c..cac4036 100644 --- a/src/wayland/xdg_shell.rs +++ b/src/wayland/xdg_shell.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use super::{ panel_item::{PanelItem, RecommendedState, ToplevelState}, state::WaylandState, - surface::{CoreSurface, SurfaceGeometry}, + surface::SurfaceGeometry, SERIAL_COUNTER, }; use mint::Vector2; @@ -278,9 +278,10 @@ impl Dispatch for WaylandState { *data.geometry.lock() = Some(geometry); let Ok(wl_surface) = data.wl_surface.upgrade() else { return; }; compositor::with_states(&wl_surface, |data| { - if let Some(core_surface) = data.data_map.get::() { - core_surface.set_geometry(geometry); - } + // if let Some(core_surface) = data.data_map.get::>() { + // core_surface.set_geometry(geometry); + // } + data.data_map.insert_if_missing_threadsafe(|| geometry); }); } xdg_surface::Request::AckConfigure { serial: _ } => (),