diff --git a/Cargo.lock b/Cargo.lock index 4e78955..e8aab85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -1520,7 +1520,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -2645,7 +2645,7 @@ checksum = "2f2b15926089e5526bb2dd738a2eb0e59034356e06eb71e1cd912358c0e62c4d" [[package]] name = "stardust-xr" version = "0.45.0" -source = "git+https://github.com/StardustXR/core.git?branch=dev#6ea2a27df24e5fcf31fe2f7726989f0a1aecbd6c" +source = "git+https://github.com/StardustXR/core.git?branch=dev#0e746ca4d0a04f668fc1958e38b9d799eb5e3370" dependencies = [ "cluFlock", "color-eyre", @@ -2666,7 +2666,7 @@ dependencies = [ [[package]] name = "stardust-xr-schemas" version = "1.5.3" -source = "git+https://github.com/StardustXR/core.git?branch=dev#6ea2a27df24e5fcf31fe2f7726989f0a1aecbd6c" +source = "git+https://github.com/StardustXR/core.git?branch=dev#0e746ca4d0a04f668fc1958e38b9d799eb5e3370" dependencies = [ "flatbuffers", "flexbuffers", @@ -2698,7 +2698,6 @@ dependencies = [ "mint", "nanoid", "nix 0.29.0", - "once_cell", "parking_lot 0.12.3", "portable-atomic", "prisma", @@ -3388,7 +3387,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 61d3d43..dd50cbc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,7 +55,6 @@ lto = "thin" [dependencies] # small utility thingys -once_cell = "1.19.0" nanoid = "0.4.0" lazy_static = "1.5.0" rand = "0.8.5" diff --git a/src/core/client.rs b/src/core/client.rs index 0ac572f..adf7e30 100644 --- a/src/core/client.rs +++ b/src/core/client.rs @@ -14,11 +14,16 @@ use crate::{ use color_eyre::eyre::{Result, eyre}; use global_counter::primitive::exact::CounterU32; use lazy_static::lazy_static; -use once_cell::sync::OnceCell; use parking_lot::Mutex; use rustc_hash::FxHashMap; use stardust_xr::messenger::{self, MessageSenderHandle}; -use std::{fmt::Debug, fs, iter::FromIterator, path::PathBuf, sync::Arc}; +use std::{ + fmt::Debug, + fs, + iter::FromIterator, + path::PathBuf, + sync::{Arc, OnceLock}, +}; use tokio::{net::UnixStream, task::JoinHandle}; use tracing::info; @@ -29,16 +34,16 @@ lazy_static! { // env: None, exe: None, - dispatch_join_handle: OnceCell::new(), - flush_join_handle: OnceCell::new(), - disconnect_status: OnceCell::new(), + dispatch_join_handle: OnceLock::new(), + flush_join_handle: OnceLock::new(), + disconnect_status: OnceLock::new(), message_sender_handle: None, id_counter: CounterU32::new(0), scenegraph: Default::default(), - root: OnceCell::new(), + root: OnceLock::new(), base_resource_prefixes: Default::default(), - state: OnceCell::default(), + state: OnceLock::default(), }); } @@ -59,16 +64,16 @@ pub struct Client { pub pid: Option, // env: Option>, exe: Option, - dispatch_join_handle: OnceCell>>, - flush_join_handle: OnceCell>>, - disconnect_status: OnceCell>, + dispatch_join_handle: OnceLock>>, + flush_join_handle: OnceLock>>, + disconnect_status: OnceLock>, id_counter: CounterU32, pub message_sender_handle: Option, pub scenegraph: Arc, - pub root: OnceCell>, + pub root: OnceLock>, pub base_resource_prefixes: Mutex>, - pub state: OnceCell, + pub state: OnceLock, } impl Client { pub fn from_connection(connection: UnixStream) -> Result> { @@ -95,16 +100,16 @@ impl Client { // env, exe: exe.clone(), - dispatch_join_handle: OnceCell::new(), - flush_join_handle: OnceCell::new(), - disconnect_status: OnceCell::new(), + dispatch_join_handle: OnceLock::new(), + flush_join_handle: OnceLock::new(), + disconnect_status: OnceLock::new(), id_counter: CounterU32::new(256), message_sender_handle: Some(messenger_tx.handle()), scenegraph: scenegraph.clone(), - root: OnceCell::new(), + root: OnceLock::new(), base_resource_prefixes: Default::default(), - state: OnceCell::default(), + state: OnceLock::default(), }); let _ = client.scenegraph.client.set(Arc::downgrade(&client)); let _ = client.root.set(Root::create(&client, state.root)?); @@ -128,7 +133,7 @@ impl Client { .map(|exe| exe.to_string()) }) .unwrap_or_else(|| "??".to_string()); - let _ = client.dispatch_join_handle.get_or_try_init(|| { + let _ = client.dispatch_join_handle.get_or_init(|| { task::new( || { format!( @@ -147,8 +152,9 @@ impl Client { } }, ) + .unwrap() }); - let _ = client.flush_join_handle.get_or_try_init(|| { + let _ = client.flush_join_handle.get_or_init(|| { task::new( || format!("client flush pid={} exe={}", &pid_printable, &exe_printable,), { @@ -162,6 +168,7 @@ impl Client { } }, ) + .unwrap() }); Ok(client) diff --git a/src/core/destroy_queue.rs b/src/core/destroy_queue.rs index 5b07bf1..f6e9d29 100644 --- a/src/core/destroy_queue.rs +++ b/src/core/destroy_queue.rs @@ -1,14 +1,13 @@ -use once_cell::sync::Lazy; use parking_lot::Mutex; -use std::any::Any; +use std::{any::Any, sync::LazyLock}; use tokio::sync::mpsc::{self, unbounded_channel}; type Anything = Box; -static MAIN_DESTROY_QUEUE: Lazy<( +static MAIN_DESTROY_QUEUE: LazyLock<( mpsc::UnboundedSender, Mutex>, -)> = Lazy::new(|| { +)> = LazyLock::new(|| { let (tx, rx) = unbounded_channel(); (tx, Mutex::new(rx)) }); diff --git a/src/core/scenegraph.rs b/src/core/scenegraph.rs index bb62254..d51d4c4 100644 --- a/src/core/scenegraph.rs +++ b/src/core/scenegraph.rs @@ -2,7 +2,6 @@ use crate::core::error::Result; use crate::nodes::Node; use crate::nodes::alias::get_original; use crate::{core::client::Client, nodes::Message}; -use once_cell::sync::OnceCell; use parking_lot::Mutex; use rustc_hash::FxHashMap; use serde::Serialize; @@ -11,13 +10,13 @@ use stardust_xr::scenegraph::ScenegraphError; use stardust_xr::schemas::flex::serialize; use std::future::Future; use std::os::fd::OwnedFd; -use std::sync::{Arc, Weak}; +use std::sync::{Arc, OnceLock, Weak}; use tokio::sync::oneshot; use tracing::{debug, debug_span}; #[derive(Default)] pub struct Scenegraph { - pub(super) client: OnceCell>, + pub(super) client: OnceLock>, nodes: Mutex>>, } diff --git a/src/main.rs b/src/main.rs index b6ebd2f..87281e0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,12 +15,11 @@ use core::client::Client; use core::task; use directories::ProjectDirs; use objects::ServerObjects; -use once_cell::sync::OnceCell; use session::{launch_start, save_session}; use stardust_xr::schemas::dbus::object_registry::ObjectRegistry; use stardust_xr::server; use std::path::PathBuf; -use std::sync::Arc; +use std::sync::{Arc, OnceLock}; use std::time::Duration; use stereokit_rust::material::Material; use stereokit_rust::shader::Shader; @@ -70,7 +69,7 @@ struct CliArgs { restore: Option, } -static STARDUST_INSTANCE: OnceCell = OnceCell::new(); +static STARDUST_INSTANCE: OnceLock = OnceLock::new(); // #[tokio::main] #[tokio::main(flavor = "current_thread")] diff --git a/src/nodes/audio.rs b/src/nodes/audio.rs index 09015db..dd74d29 100644 --- a/src/nodes/audio.rs +++ b/src/nodes/audio.rs @@ -7,12 +7,11 @@ use crate::core::resource::get_resource_file; use crate::nodes::spatial::{SPATIAL_ASPECT_ALIAS_INFO, Spatial, Transform}; use color_eyre::eyre::eyre; use glam::{Vec4Swizzles, vec3}; -use once_cell::sync::OnceCell; use parking_lot::Mutex; use stardust_xr::values::ResourceID; use std::ops::DerefMut; -use std::sync::Arc; +use std::sync::{Arc, OnceLock}; use std::{ffi::OsStr, path::PathBuf}; use stereokit_rust::sound::{Sound as SkSound, SoundInst}; @@ -24,7 +23,7 @@ pub struct Sound { volume: f32, pending_audio_path: PathBuf, - sk_sound: OnceCell, + sk_sound: OnceLock, instance: Mutex>, stop: Mutex>, play: Mutex>, @@ -41,7 +40,7 @@ impl Sound { space: node.get_aspect::().unwrap().clone(), volume: 1.0, pending_audio_path, - sk_sound: OnceCell::new(), + sk_sound: OnceLock::new(), instance: Mutex::new(None), stop: Mutex::new(None), play: Mutex::new(None), diff --git a/src/nodes/drawable/model.rs b/src/nodes/drawable/model.rs index 0f04785..3335abe 100644 --- a/src/nodes/drawable/model.rs +++ b/src/nodes/drawable/model.rs @@ -9,13 +9,12 @@ use crate::nodes::alias::{Alias, AliasList}; use crate::nodes::spatial::Spatial; use color_eyre::eyre::eyre; use glam::{Mat4, Vec2, Vec3}; -use once_cell::sync::{Lazy, OnceCell}; use parking_lot::Mutex; use rustc_hash::FxHashMap; use stardust_xr::values::ResourceID; use std::ffi::OsStr; use std::hash::{Hash, Hasher}; -use std::sync::{Arc, Weak}; +use std::sync::{Arc, LazyLock, OnceLock, Weak}; use stereokit_rust::material::Transparency; use stereokit_rust::maths::Bounds; use stereokit_rust::sk::MainThreadToken; @@ -98,9 +97,9 @@ impl MaterialRegistry { } } -static MATERIAL_REGISTRY: Lazy = Lazy::new(MaterialRegistry::default); +static MATERIAL_REGISTRY: LazyLock = LazyLock::new(MaterialRegistry::default); static MODEL_REGISTRY: Registry = Registry::new(); -static HOLDOUT_MATERIAL: OnceCell> = OnceCell::new(); +static HOLDOUT_MATERIAL: OnceLock> = OnceLock::new(); impl MaterialParameter { fn apply_to_material(&self, client: &Client, material: &Material, parameter_name: &str) { @@ -333,7 +332,7 @@ impl ModelPartAspect for ModelPart { pub struct Model { space: Arc, _resource_id: ResourceID, - sk_model: OnceCell, + sk_model: OnceLock, parts: Mutex>>, } impl Model { @@ -348,7 +347,7 @@ impl Model { let model = Arc::new(Model { space: node.get_aspect::().unwrap().clone(), _resource_id: resource_id, - sk_model: OnceCell::new(), + sk_model: OnceLock::new(), parts: Mutex::new(Vec::default()), }); MODEL_REGISTRY.add_raw(&model); diff --git a/src/nodes/drawable/text.rs b/src/nodes/drawable/text.rs index 55ba8cf..282553e 100644 --- a/src/nodes/drawable/text.rs +++ b/src/nodes/drawable/text.rs @@ -7,9 +7,12 @@ use crate::{ }; use color_eyre::eyre::eyre; use glam::{Mat4, Vec2, vec3}; -use once_cell::sync::OnceCell; use parking_lot::Mutex; -use std::{ffi::OsStr, path::PathBuf, sync::Arc}; +use std::{ + ffi::OsStr, + path::PathBuf, + sync::{Arc, OnceLock}, +}; use stereokit_rust::{ font::Font, sk::MainThreadToken, @@ -38,7 +41,7 @@ fn convert_align(x_align: super::XAlign, y_align: super::YAlign) -> TextAlign { pub struct Text { space: Arc, font_path: Option, - style: OnceCell, + style: OnceLock, text: Mutex, data: Mutex, @@ -51,7 +54,7 @@ impl Text { font_path: style.font.as_ref().and_then(|res| { get_resource_file(res, &client, &[OsStr::new("ttf"), OsStr::new("otf")]) }), - style: OnceCell::new(), + style: OnceLock::new(), text: Mutex::new(text), data: Mutex::new(style), @@ -62,73 +65,71 @@ impl Text { } fn draw(&self, token: &MainThreadToken) { - let style = self.style.get_or_try_init(|| -> Result { + let style = self.style.get_or_init(|| { let font = self .font_path .as_deref() .and_then(|path| Font::from_file(path).ok()) .unwrap_or_default(); - Ok(SkTextStyle::from_font(font, 1.0, Color32::WHITE)) + SkTextStyle::from_font(font, 1.0, Color32::WHITE) }); - if let Ok(style) = style { - let text = self.text.lock(); - let data = self.data.lock(); - let transform = self.space.global_transform() - * Mat4::from_scale(vec3( - data.character_height, - data.character_height, - data.character_height, - )); - if let Some(bounds) = &data.bounds { - stereokit_rust::system::Text::add_in( - token, - &*text, - transform, - Vec2::from(bounds.bounds) / data.character_height, - match bounds.fit { - super::TextFit::Wrap => TextFit::Wrap, - super::TextFit::Clip => TextFit::Clip, - super::TextFit::Squeeze => TextFit::Squeeze, - super::TextFit::Exact => TextFit::Exact, - super::TextFit::Overflow => TextFit::Overflow, - }, - Some(*style), - Some(Color128::new( - data.color.c.r, - data.color.c.g, - data.color.c.b, - data.color.a, - )), - data.bounds - .as_ref() - .map(|b| convert_align(b.anchor_align_x, b.anchor_align_y)), - Some(convert_align(data.text_align_x, data.text_align_y)), - None, - None, - None, - ); - } else { - stereokit_rust::system::Text::add_at( - token, - &*text, - transform, - Some(*style), - Some(Color128::new( - data.color.c.r, - data.color.c.g, - data.color.c.b, - data.color.a, - )), - data.bounds - .as_ref() - .map(|b| convert_align(b.anchor_align_x, b.anchor_align_y)), - Some(convert_align(data.text_align_x, data.text_align_y)), - None, - None, - None, - ); - } + let text = self.text.lock(); + let data = self.data.lock(); + let transform = self.space.global_transform() + * Mat4::from_scale(vec3( + data.character_height, + data.character_height, + data.character_height, + )); + if let Some(bounds) = &data.bounds { + stereokit_rust::system::Text::add_in( + token, + &*text, + transform, + Vec2::from(bounds.bounds) / data.character_height, + match bounds.fit { + super::TextFit::Wrap => TextFit::Wrap, + super::TextFit::Clip => TextFit::Clip, + super::TextFit::Squeeze => TextFit::Squeeze, + super::TextFit::Exact => TextFit::Exact, + super::TextFit::Overflow => TextFit::Overflow, + }, + Some(*style), + Some(Color128::new( + data.color.c.r, + data.color.c.g, + data.color.c.b, + data.color.a, + )), + data.bounds + .as_ref() + .map(|b| convert_align(b.anchor_align_x, b.anchor_align_y)), + Some(convert_align(data.text_align_x, data.text_align_y)), + None, + None, + None, + ); + } else { + stereokit_rust::system::Text::add_at( + token, + &*text, + transform, + Some(*style), + Some(Color128::new( + data.color.c.r, + data.color.c.g, + data.color.c.b, + data.color.a, + )), + data.bounds + .as_ref() + .map(|b| convert_align(b.anchor_align_x, b.anchor_align_y)), + Some(convert_align(data.text_align_x, data.text_align_y)), + None, + None, + None, + ); } } } diff --git a/src/nodes/fields.rs b/src/nodes/fields.rs index e0b6e59..3214009 100644 --- a/src/nodes/fields.rs +++ b/src/nodes/fields.rs @@ -12,15 +12,14 @@ use crate::nodes::spatial::SPATIAL_REF_ASPECT_ALIAS_INFO; use crate::nodes::spatial::Transform; use color_eyre::eyre::OptionExt; use glam::{Vec3, Vec3A, Vec3Swizzles, vec2, vec3, vec3a}; -use once_cell::sync::Lazy; use parking_lot::Mutex; use rustc_hash::FxHashMap; use stardust_xr::values::Vector3; -use std::sync::Arc; +use std::sync::{Arc, LazyLock}; // TODO: get SDFs working properly with non-uniform scale and so on, output distance relative to the spatial it's compared against -pub static FIELD_ALIAS_INFO: Lazy = Lazy::new(|| AliasInfo { +pub static FIELD_ALIAS_INFO: LazyLock = LazyLock::new(|| AliasInfo { server_methods: vec![ SPATIAL_REF_GET_TRANSFORM_SERVER_OPCODE, SPATIAL_REF_GET_LOCAL_BOUNDING_BOX_SERVER_OPCODE, diff --git a/src/nodes/items/camera.rs b/src/nodes/items/camera.rs index 9f242fe..65bdc9d 100644 --- a/src/nodes/items/camera.rs +++ b/src/nodes/items/camera.rs @@ -20,11 +20,11 @@ use crate::{ use glam::Mat4; use lazy_static::lazy_static; use mint::{ColumnMatrix4, Vector2}; -use once_cell::sync::OnceCell; use parking_lot::Mutex; use stardust_xr::schemas::flex::{deserialize, serialize}; use std::sync::Arc; +use std::sync::OnceLock; use stereokit_rust::{ material::{Material, Transparency}, shader::Shader, @@ -33,7 +33,6 @@ use stereokit_rust::{ tex::{Tex, TexFormat, TexType}, util::Color128, }; -use tracing::error; pub struct TexWrapper(pub Tex); unsafe impl Send for TexWrapper {} @@ -68,8 +67,8 @@ struct FrameInfo { pub struct CameraItem { space: Arc, frame_info: Mutex, - sk_tex: OnceCell, - sk_mat: OnceCell>, + sk_tex: OnceLock, + sk_mat: OnceLock>, applied_to: Registry, apply_to: Registry, } @@ -82,8 +81,8 @@ impl CameraItem { proj_matrix, px_size, }), - sk_tex: OnceCell::new(), - sk_mat: OnceCell::new(), + sk_tex: OnceLock::new(), + sk_mat: OnceLock::new(), applied_to: Registry::new(), apply_to: Registry::new(), }); @@ -140,19 +139,13 @@ impl CameraItem { TexFormat::RGBA32Linear, )) }); - let sk_mat = self - .sk_mat - .get_or_try_init(|| -> Result> { - let shader = Shader::from_memory(UNLIT_SHADER_BYTES)?; - let mut mat = Material::new(&shader, None); - mat.get_all_param_info().set_texture("diffuse", &sk_tex.0); - mat.transparency(Transparency::Blend); - Ok(Arc::new(MaterialWrapper(mat))) - }); - let Ok(sk_mat) = sk_mat else { - error!("unable to make camera item stereokit texture"); - return; - }; + let sk_mat = self.sk_mat.get_or_init(|| { + let shader = Shader::from_memory(UNLIT_SHADER_BYTES).unwrap(); + let mut mat = Material::new(&shader, None); + mat.get_all_param_info().set_texture("diffuse", &sk_tex.0); + mat.transparency(Transparency::Blend); + Arc::new(MaterialWrapper(mat)) + }); for model_part in self.apply_to.take_valid_contents() { model_part.replace_material(sk_mat.clone()) } diff --git a/src/nodes/mod.rs b/src/nodes/mod.rs index 9e9507a..2048cbf 100644 --- a/src/nodes/mod.rs +++ b/src/nodes/mod.rs @@ -278,8 +278,8 @@ impl Node { let serialized = serialize(input)?; let result = message_sender_handle - .method(self.id, aspect_id, method, &serialized, fds)? - .await + .method(self.id, aspect_id, method, &serialized, fds) + .await? .map_err(ServerError::RemoteMethodError)?; let (message, fds) = result.into_components(); diff --git a/src/nodes/spatial/mod.rs b/src/nodes/spatial/mod.rs index 8722059..2fb0bef 100644 --- a/src/nodes/spatial/mod.rs +++ b/src/nodes/spatial/mod.rs @@ -12,12 +12,11 @@ use crate::nodes::{Node, OWNED_ASPECT_ALIAS_INFO}; use color_eyre::eyre::OptionExt; use glam::{Mat4, Quat, Vec3, vec3a}; use mint::Vector3; -use once_cell::sync::OnceCell; use parking_lot::Mutex; use rustc_hash::FxHashMap; use std::fmt::Debug; use std::ptr; -use std::sync::{Arc, Weak}; +use std::sync::{Arc, OnceLock, Weak}; use stereokit_rust::maths::Bounds; stardust_xr_server_codegen::codegen_spatial_protocol!(); @@ -59,7 +58,7 @@ pub struct Spatial { transform: Mutex, zone: Mutex>, children: Registry, - pub bounding_box_calc: OnceCell Bounds>, + pub bounding_box_calc: OnceLock Bounds>, } impl Spatial { @@ -71,7 +70,7 @@ impl Spatial { transform: Mutex::new(transform), zone: Mutex::new(Weak::new()), children: Registry::new(), - bounding_box_calc: OnceCell::default(), + bounding_box_calc: OnceLock::default(), }) } pub fn add_to( diff --git a/src/wayland/mod.rs b/src/wayland/mod.rs index 6387df4..656709a 100644 --- a/src/wayland/mod.rs +++ b/src/wayland/mod.rs @@ -12,7 +12,6 @@ mod xdg_shell; use self::{state::WaylandState, surface::CORE_SURFACES}; use crate::{core::task, wayland::state::ClientState}; use color_eyre::eyre::{Result, ensure}; -use once_cell::sync::OnceCell; use parking_lot::Mutex; use smithay::backend::allocator::dmabuf::Dmabuf; use smithay::backend::egl::EGLContext; @@ -26,6 +25,7 @@ use smithay::wayland::dmabuf; use std::ffi::OsStr; use std::os::fd::{IntoRawFd, OwnedFd}; use std::os::unix::prelude::AsRawFd; +use std::sync::OnceLock; use std::{ ffi::c_void, os::unix::{net::UnixListener, prelude::FromRawFd}, @@ -39,7 +39,7 @@ use tokio::{ }; use tracing::{debug_span, info, instrument}; -pub static WAYLAND_DISPLAY: OnceCell = OnceCell::new(); +pub static WAYLAND_DISPLAY: OnceLock = OnceLock::new(); struct EGLRawHandles { display: *const c_void, @@ -161,7 +161,7 @@ impl Wayland { let (stream, _) = acc?; let client_state = Arc::new(ClientState { pid: stream.peer_cred().ok().and_then(|c| c.pid()), - id: OnceCell::new(), + id: OnceLock::new(), compositor_state: Default::default(), seat: state.lock().seat.clone(), }); diff --git a/src/wayland/state.rs b/src/wayland/state.rs index eaf2389..711e32c 100644 --- a/src/wayland/state.rs +++ b/src/wayland/state.rs @@ -1,6 +1,5 @@ use super::seat::SeatWrapper; use crate::wayland::drm::wl_drm::WlDrm; -use once_cell::sync::OnceCell; use parking_lot::Mutex; use smithay::{ backend::{ @@ -42,13 +41,13 @@ use smithay::{ shm::{ShmHandler, ShmState}, }, }; -use std::sync::Arc; +use std::sync::{Arc, OnceLock}; use tokio::sync::mpsc::UnboundedSender; use tracing::{info, warn}; pub struct ClientState { pub pid: Option, - pub id: OnceCell, + pub id: OnceLock, pub compositor_state: CompositorClientState, pub seat: Arc, } diff --git a/src/wayland/surface.rs b/src/wayland/surface.rs index d8462de..936871b 100644 --- a/src/wayland/surface.rs +++ b/src/wayland/surface.rs @@ -9,7 +9,6 @@ use crate::{ items::camera::TexWrapper, }, }; -use once_cell::sync::OnceCell; use parking_lot::Mutex; use send_wrapper::SendWrapper; use smithay::{ @@ -22,7 +21,11 @@ use smithay::{ output::Output, reexports::wayland_server::{self, Resource, protocol::wl_surface::WlSurface}, }; -use std::{ffi::c_void, sync::Arc, time::Duration}; +use std::{ + ffi::c_void, + sync::{Arc, OnceLock}, + time::Duration, +}; use stereokit_rust::{ material::{Material, Transparency}, shader::Shader, @@ -44,8 +47,8 @@ impl Drop for CoreSurfaceData { pub struct CoreSurface { pub weak_surface: wayland_server::Weak, mapped_data: Mutex>, - sk_tex: OnceCell>, - sk_mat: OnceCell>, + sk_tex: OnceLock>, + sk_mat: OnceLock>, material_offset: Mutex>, pub pending_material_applications: Registry, } @@ -55,8 +58,8 @@ impl CoreSurface { let core_surface = CORE_SURFACES.add(CoreSurface { weak_surface: surface.downgrade(), mapped_data: Mutex::new(None), - sk_tex: OnceCell::new(), - sk_mat: OnceCell::new(), + sk_tex: OnceLock::new(), + sk_mat: OnceLock::new(), material_offset: Mutex::new(Delta::new(0)), pending_material_applications: Registry::new(), });