feat(wayland/surface): geometry resizing, unused
This commit is contained in:
@@ -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;
|
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.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;
|
return o;
|
||||||
}
|
}
|
||||||
float4 ps(psIn input) : SV_TARGET {
|
float4 ps(psIn input) : SV_TARGET {
|
||||||
|
|||||||
Binary file not shown.
@@ -4,19 +4,19 @@
|
|||||||
|
|
||||||
//--name = stardust/text_shader
|
//--name = stardust/text_shader
|
||||||
//--diffuse = white
|
//--diffuse = white
|
||||||
//--fcFactor = 1.0
|
|
||||||
//--ripple = 4.0
|
|
||||||
//--uv_offset = 0.0, 0.0
|
//--uv_offset = 0.0, 0.0
|
||||||
//--uv_scale = 1.0, 1.0
|
//--uv_scale = 1.0, 1.0
|
||||||
|
//--fcFactor = 1.0
|
||||||
|
//--ripple = 4.0
|
||||||
//--alpha_min = 0.0
|
//--alpha_min = 0.0
|
||||||
//--alpha_max = 1.0
|
//--alpha_max = 1.0
|
||||||
Texture2D diffuse : register(t0);
|
Texture2D diffuse : register(t0);
|
||||||
SamplerState diffuse_s : register(s0);
|
SamplerState diffuse_s : register(s0);
|
||||||
float4 diffuse_i;
|
float4 diffuse_i;
|
||||||
float fcFactor;
|
|
||||||
float ripple;
|
|
||||||
float2 uv_scale;
|
float2 uv_scale;
|
||||||
float2 uv_offset;
|
float2 uv_offset;
|
||||||
|
float fcFactor;
|
||||||
|
float ripple;
|
||||||
float alpha_min;
|
float alpha_min;
|
||||||
float alpha_max;
|
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;
|
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.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;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -3,7 +3,6 @@ use crate::{
|
|||||||
core::{delta::Delta, destroy_queue, registry::Registry},
|
core::{delta::Delta, destroy_queue, registry::Registry},
|
||||||
nodes::drawable::model::Model,
|
nodes::drawable::model::Model,
|
||||||
};
|
};
|
||||||
use glam::vec2;
|
|
||||||
use mint::Vector2;
|
use mint::Vector2;
|
||||||
use once_cell::sync::OnceCell;
|
use once_cell::sync::OnceCell;
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
@@ -67,7 +66,7 @@ pub struct CoreSurface {
|
|||||||
sk_tex: OnceCell<SendWrapper<SKTexture>>,
|
sk_tex: OnceCell<SendWrapper<SKTexture>>,
|
||||||
sk_mat: OnceCell<Arc<SendWrapper<Material>>>,
|
sk_mat: OnceCell<Arc<SendWrapper<Material>>>,
|
||||||
material_offset: Mutex<Delta<u32>>,
|
material_offset: Mutex<Delta<u32>>,
|
||||||
geometry: Mutex<Delta<SurfaceGeometry>>,
|
// geometry: Mutex<Delta<Option<SurfaceGeometry>>>,
|
||||||
pub pending_material_applications: Mutex<Vec<(Arc<Model>, u32)>>,
|
pub pending_material_applications: Mutex<Vec<(Arc<Model>, u32)>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,6 +77,9 @@ impl CoreSurface {
|
|||||||
surface: &WlSurface,
|
surface: &WlSurface,
|
||||||
) {
|
) {
|
||||||
compositor::with_states(surface, |data| {
|
compositor::with_states(surface, |data| {
|
||||||
|
// let mut geometry: Delta<Option<SurfaceGeometry>> =
|
||||||
|
// Delta::new(data.data_map.get::<SurfaceGeometry>().cloned());
|
||||||
|
// geometry.mark_changed();
|
||||||
data.data_map.insert_if_missing_threadsafe(|| {
|
data.data_map.insert_if_missing_threadsafe(|| {
|
||||||
CORE_SURFACES.add(CoreSurface {
|
CORE_SURFACES.add(CoreSurface {
|
||||||
display: Arc::downgrade(display),
|
display: Arc::downgrade(display),
|
||||||
@@ -87,10 +89,7 @@ impl CoreSurface {
|
|||||||
sk_tex: OnceCell::new(),
|
sk_tex: OnceCell::new(),
|
||||||
sk_mat: OnceCell::new(),
|
sk_mat: OnceCell::new(),
|
||||||
material_offset: Mutex::new(Delta::new(0)),
|
material_offset: Mutex::new(Delta::new(0)),
|
||||||
geometry: Mutex::new(Delta::new(SurfaceGeometry {
|
// geometry: Mutex::new(geometry),
|
||||||
origin: [0; 2].into(),
|
|
||||||
size: [0; 2].into(),
|
|
||||||
})),
|
|
||||||
pending_material_applications: Mutex::new(Vec::new()),
|
pending_material_applications: Mutex::new(Vec::new()),
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
@@ -147,11 +146,12 @@ impl CoreSurface {
|
|||||||
self.with_states(|data| {
|
self.with_states(|data| {
|
||||||
// let just_mapped = mapped_data.is_none();
|
// let just_mapped = mapped_data.is_none();
|
||||||
// if just_mapped {
|
// if just_mapped {
|
||||||
let smithay_tex = data
|
let renderer_surface_state = data
|
||||||
.data_map
|
.data_map
|
||||||
.get::<RendererSurfaceStateUserData>()
|
.get::<RendererSurfaceStateUserData>()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.borrow()
|
.borrow();
|
||||||
|
let smithay_tex = renderer_surface_state
|
||||||
.texture::<Gles2Renderer>(renderer.id())
|
.texture::<Gles2Renderer>(renderer.id())
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.clone();
|
.clone();
|
||||||
@@ -173,16 +173,25 @@ impl CoreSurface {
|
|||||||
if let Some(material_offset) = self.material_offset.lock().delta() {
|
if let Some(material_offset) = self.material_offset.lock().delta() {
|
||||||
sk_mat.set_queue_offset(*material_offset as i32);
|
sk_mat.set_queue_offset(*material_offset as i32);
|
||||||
}
|
}
|
||||||
if let Some(geometry) = self.geometry.lock().delta() {
|
// if let Some(geometry) = self.geometry.lock().delta().cloned().unwrap_or_default() {
|
||||||
let tex_size = vec2(smithay_tex.width() as f32, smithay_tex.height() as f32);
|
// let buffer_size = renderer_surface_state.buffer_size().unwrap();
|
||||||
let geometry_origin = vec2(geometry.origin.x as f32, geometry.origin.y as f32);
|
// let surface_size = dbg!(vec2(buffer_size.w as f32, buffer_size.h as f32));
|
||||||
let geometry_size = vec2(geometry.size.x as f32, geometry.size.y as f32);
|
// let geometry_origin =
|
||||||
sk_mat.set_parameter("uv_offset", &Vector2::from(geometry_origin / tex_size));
|
// dbg!(vec2(geometry.origin.x as f32, geometry.origin.y as f32));
|
||||||
sk_mat.set_parameter("uv_scale", &Vector2::from(geometry_size / tex_size));
|
// 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 {
|
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)),
|
wl_tex: Some(SendWrapper::new(smithay_tex)),
|
||||||
};
|
};
|
||||||
*mapped_data = Some(new_mapped_data);
|
*mapped_data = Some(new_mapped_data);
|
||||||
@@ -207,9 +216,9 @@ impl CoreSurface {
|
|||||||
*self.material_offset.lock().value_mut() = material_offset;
|
*self.material_offset.lock().value_mut() = material_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_geometry(&self, geometry: SurfaceGeometry) {
|
// pub fn set_geometry(&self, geometry: SurfaceGeometry) {
|
||||||
*self.geometry.lock().value_mut() = geometry;
|
// *self.geometry.lock().value_mut() = Some(geometry);
|
||||||
}
|
// }
|
||||||
|
|
||||||
pub fn apply_material(&self, model: Arc<Model>, material_idx: u32) {
|
pub fn apply_material(&self, model: Arc<Model>, material_idx: u32) {
|
||||||
self.pending_material_applications
|
self.pending_material_applications
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ use std::sync::Arc;
|
|||||||
use super::{
|
use super::{
|
||||||
panel_item::{PanelItem, RecommendedState, ToplevelState},
|
panel_item::{PanelItem, RecommendedState, ToplevelState},
|
||||||
state::WaylandState,
|
state::WaylandState,
|
||||||
surface::{CoreSurface, SurfaceGeometry},
|
surface::SurfaceGeometry,
|
||||||
SERIAL_COUNTER,
|
SERIAL_COUNTER,
|
||||||
};
|
};
|
||||||
use mint::Vector2;
|
use mint::Vector2;
|
||||||
@@ -278,9 +278,10 @@ impl Dispatch<XdgSurface, WaylandSurface, WaylandState> for WaylandState {
|
|||||||
*data.geometry.lock() = Some(geometry);
|
*data.geometry.lock() = Some(geometry);
|
||||||
let Ok(wl_surface) = data.wl_surface.upgrade() else { return; };
|
let Ok(wl_surface) = data.wl_surface.upgrade() else { return; };
|
||||||
compositor::with_states(&wl_surface, |data| {
|
compositor::with_states(&wl_surface, |data| {
|
||||||
if let Some(core_surface) = data.data_map.get::<CoreSurface>() {
|
// if let Some(core_surface) = data.data_map.get::<Arc<CoreSurface>>() {
|
||||||
core_surface.set_geometry(geometry);
|
// core_surface.set_geometry(geometry);
|
||||||
}
|
// }
|
||||||
|
data.data_map.insert_if_missing_threadsafe(|| geometry);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
xdg_surface::Request::AckConfigure { serial: _ } => (),
|
xdg_surface::Request::AckConfigure { serial: _ } => (),
|
||||||
|
|||||||
Reference in New Issue
Block a user