refactor(drawable): remove sendwrapper

This commit is contained in:
Nova
2023-08-06 10:10:50 -04:00
parent 3432c63a6e
commit 5dc7cfbe83
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 parking_lot::Mutex;
use portable_atomic::{AtomicBool, Ordering}; use portable_atomic::{AtomicBool, Ordering};
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use send_wrapper::SendWrapper;
use serde::Deserialize; use serde::Deserialize;
use stardust_xr::schemas::flex::deserialize; use stardust_xr::schemas::flex::deserialize;
use stardust_xr::values::Transform; use stardust_xr::values::Transform;
@@ -122,7 +121,7 @@ pub struct ModelPart {
space: Arc<Spatial>, space: Arc<Spatial>,
model: Weak<Model>, model: Weak<Model>,
pending_material_parameters: Mutex<FxHashMap<String, MaterialParameter>>, pending_material_parameters: Mutex<FxHashMap<String, MaterialParameter>>,
pending_material_replacement: Mutex<Option<Arc<SendWrapper<Material>>>>, pending_material_replacement: Mutex<Option<Arc<Material>>>,
} }
impl ModelPart { impl ModelPart {
fn create_for_model(sk: &impl StereoKitMultiThread, model: &Arc<Model>, sk_model: &SKModel) { fn create_for_model(sk: &impl StereoKitMultiThread, model: &Arc<Model>, sk_model: &SKModel) {
@@ -228,7 +227,7 @@ impl ModelPart {
Ok(()) Ok(())
} }
pub fn replace_material(&self, replacement: Arc<SendWrapper<Material>>) { pub fn replace_material(&self, replacement: Arc<Material>) {
self.pending_material_replacement self.pending_material_replacement
.lock() .lock()
.replace(replacement); .replace(replacement);

View File

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

View File

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