refactor(drawable): remove sendwrapper

This commit is contained in:
Nova
2023-08-06 10:10:50 -04:00
parent ccdab7578a
commit 0257655eba
3 changed files with 16 additions and 20 deletions

View File

@@ -14,7 +14,6 @@ use once_cell::sync::OnceCell;
use parking_lot::Mutex;
use portable_atomic::{AtomicBool, Ordering};
use rustc_hash::FxHashMap;
use send_wrapper::SendWrapper;
use serde::Deserialize;
use stardust_xr::schemas::flex::deserialize;
use stardust_xr::values::Transform;
@@ -122,7 +121,7 @@ pub struct ModelPart {
space: Arc<Spatial>,
model: Weak<Model>,
pending_material_parameters: Mutex<FxHashMap<String, MaterialParameter>>,
pending_material_replacement: Mutex<Option<Arc<SendWrapper<Material>>>>,
pending_material_replacement: Mutex<Option<Arc<Material>>>,
}
impl ModelPart {
fn create_for_model(sk: &impl StereoKitMultiThread, model: &Arc<Model>, sk_model: &SKModel) {
@@ -228,7 +227,7 @@ impl ModelPart {
Ok(())
}
pub fn replace_material(&self, replacement: Arc<SendWrapper<Material>>) {
pub fn replace_material(&self, replacement: Arc<Material>) {
self.pending_material_replacement
.lock()
.replace(replacement);

View File

@@ -13,7 +13,6 @@ use once_cell::sync::OnceCell;
use parking_lot::Mutex;
use portable_atomic::{AtomicBool, Ordering};
use prisma::{Flatten, Rgba};
use send_wrapper::SendWrapper;
use serde::Deserialize;
use stardust_xr::{schemas::flex::deserialize, values::Transform};
use std::{ffi::OsStr, path::PathBuf, sync::Arc};
@@ -35,7 +34,7 @@ pub struct Text {
enabled: Arc<AtomicBool>,
space: Arc<Spatial>,
font_path: Option<PathBuf>,
style: OnceCell<SendWrapper<TextStyle>>,
style: OnceCell<TextStyle>,
data: Mutex<TextData>,
}
@@ -91,18 +90,16 @@ impl Text {
}
fn draw(&self, sk: &impl StereoKitDraw) {
let style = self.style.get_or_try_init(
|| -> Result<SendWrapper<TextStyle>, color_eyre::eyre::Error> {
let style = self
.style
.get_or_try_init(|| -> Result<TextStyle, color_eyre::eyre::Error> {
let font = self
.font_path
.as_deref()
.and_then(|path| sk.font_create(path).ok())
.unwrap_or_else(|| sk.font_find("default/font").unwrap());
Ok(SendWrapper::new(unsafe {
sk.text_make_style(font, 1.0, WHITE)
}))
},
);
Ok(unsafe { sk.text_make_style(font, 1.0, WHITE) })
});
if let Ok(style) = style {
let data = self.data.lock();
@@ -118,7 +115,7 @@ impl Text {
transform,
bounds / data.character_height,
data.fit,
**style,
*style,
data.bounds_align,
data.text_align,
vec3(0.0, 0.0, 0.0),
@@ -133,7 +130,7 @@ impl Text {
sk.text_add_at(
&data.text,
transform,
**style,
*style,
data.bounds_align,
data.text_align,
vec3(0.0, 0.0, 0.0),

View File

@@ -40,8 +40,8 @@ pub struct CoreSurface {
pub dh: DisplayHandle,
pub weak_surface: wayland_server::Weak<WlSurface>,
mapped_data: Mutex<Option<CoreSurfaceData>>,
sk_tex: OnceCell<SendWrapper<Tex>>,
sk_mat: OnceCell<Arc<SendWrapper<Material>>>,
sk_tex: OnceCell<Tex>,
sk_mat: OnceCell<Arc<Material>>,
material_offset: Mutex<Delta<u32>>,
on_mapped: Box<dyn Fn() + Send + Sync>,
on_commit: Box<dyn Fn(u32) + Send + Sync>,
@@ -85,9 +85,9 @@ impl CoreSurface {
pub fn process(&self, sk: &impl StereoKitDraw, renderer: &mut GlesRenderer) {
let Some(wl_surface) = self.wl_surface() else {return};
let sk_tex = self.sk_tex.get_or_init(|| {
SendWrapper::new(sk.tex_create(TextureType::IMAGE_NO_MIPS, TextureFormat::RGBA32))
});
let sk_tex = self
.sk_tex
.get_or_init(|| sk.tex_create(TextureType::IMAGE_NO_MIPS, TextureFormat::RGBA32));
self.sk_mat.get_or_init(|| {
let shader = sk.shader_create_mem(&PANEL_SHADER_BYTES).unwrap();
// let _ = renderer.with_context(|c| unsafe {
@@ -97,7 +97,7 @@ impl CoreSurface {
let mat = sk.material_create(&shader);
sk.material_set_texture(&mat, "diffuse", sk_tex.as_ref());
sk.material_set_transparency(&mat, Transparency::Blend);
Arc::new(SendWrapper::new(mat))
Arc::new(mat)
});
// Let smithay handle buffer management (has to be done here as RendererSurfaceStates is not thread safe)