diff --git a/Cargo.lock b/Cargo.lock index 74932efb..327ba360 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -50,7 +50,7 @@ dependencies = [ "ndk-context", "ndk-sys", "num_enum 0.7.3", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -291,7 +291,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -331,7 +331,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -348,7 +348,7 @@ checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -500,7 +500,7 @@ checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -604,7 +604,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -918,7 +918,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -1071,7 +1071,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -1432,7 +1432,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.63", "walkdir", "windows-sys 0.45.0", ] @@ -1460,7 +1460,7 @@ checksum = "062c875482ccb676fd40c804a40e3824d4464c18c364547456d1c8e8e951ae47" dependencies = [ "miette", "nom", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -1519,7 +1519,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-targets 0.48.5", ] [[package]] @@ -1581,7 +1581,7 @@ dependencies = [ "proc-macro2", "quote", "regex-syntax 0.8.4", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -1615,7 +1615,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -1665,7 +1665,7 @@ checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" dependencies = [ "miette-derive", "once_cell", - "thiserror", + "thiserror 1.0.63", "unicode-width", ] @@ -1677,7 +1677,7 @@ checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -1754,7 +1754,7 @@ dependencies = [ "raw-window-handle 0.4.3", "raw-window-handle 0.5.2", "raw-window-handle 0.6.2", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -1880,10 +1880,10 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.2.0", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2048,7 +2048,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", "unicase", ] @@ -2094,7 +2094,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2217,7 +2217,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" dependencies = [ "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2240,7 +2240,7 @@ dependencies = [ "itertools 0.13.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2347,7 +2347,7 @@ checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", - "thiserror", + "thiserror 1.0.63", ] [[package]] @@ -2496,7 +2496,7 @@ checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2519,7 +2519,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2625,7 +2625,7 @@ dependencies = [ "scan_fmt", "smallvec", "tempfile", - "thiserror", + "thiserror 1.0.63", "tracing", "wayland-protocols", "wayland-protocols-misc", @@ -2666,7 +2666,7 @@ dependencies = [ "serde", "shiva-color-rs", "stardust-xr-schemas", - "thiserror", + "thiserror 1.0.63", "tokio", "tracing", ] @@ -2685,7 +2685,7 @@ dependencies = [ "nanoid", "serde", "serde_repr", - "thiserror", + "thiserror 1.0.63", "tokio", "zbus", ] @@ -2752,12 +2752,12 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "stereokit-macros" version = "0.1.0" -source = "git+https://github.com/mvvvv/StereoKit-rust.git#1a0ba771a948e31044f0dd264efcc9f5be4682d5" +source = "git+https://github.com/mvvvv/StereoKit-rust.git#73ffaae6f42aa369e599a6ea0391f77840d682d8" [[package]] name = "stereokit-rust" version = "0.1.0" -source = "git+https://github.com/mvvvv/StereoKit-rust.git#1a0ba771a948e31044f0dd264efcc9f5be4682d5" +source = "git+https://github.com/mvvvv/StereoKit-rust.git#73ffaae6f42aa369e599a6ea0391f77840d682d8" dependencies = [ "android-activity", "android_logger", @@ -2771,7 +2771,7 @@ dependencies = [ "ndk-sys", "openxr-sys", "stereokit-macros", - "thiserror", + "thiserror 2.0.3", ] [[package]] @@ -2809,7 +2809,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -2825,9 +2825,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -2876,7 +2876,16 @@ version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.63", +] + +[[package]] +name = "thiserror" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +dependencies = [ + "thiserror-impl 2.0.3", ] [[package]] @@ -2887,7 +2896,18 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] @@ -2936,7 +2956,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -3089,7 +3109,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -3375,7 +3395,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] @@ -3415,7 +3435,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -3426,7 +3446,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -3718,7 +3738,7 @@ dependencies = [ "phf_shared 0.11.2", "strum", "strum_macros", - "thiserror", + "thiserror 1.0.63", "unicase", "xkbcommon-rs-codegen", "xkeysym", @@ -3794,7 +3814,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", "zvariant_utils", ] @@ -3827,7 +3847,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", ] [[package]] @@ -3853,7 +3873,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.87", "zvariant_utils", ] @@ -3867,6 +3887,6 @@ dependencies = [ "quote", "serde", "static_assertions", - "syn 2.0.77", + "syn 2.0.87", "winnow 0.6.18", ] diff --git a/src/main.rs b/src/main.rs index bfa1613e..8d8d6b6c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,7 +26,7 @@ use stereokit_rust::shader::Shader; use stereokit_rust::sk::{ sk_quit, AppMode, DepthMode, DisplayBlend, OriginMode, QuitReason, SkSettings, }; -use stereokit_rust::system::{LogLevel, Renderer}; +use stereokit_rust::system::{Handed, Input, LogLevel, Renderer}; use stereokit_rust::tex::{SHCubemap, Tex, TexFormat, TexType}; use stereokit_rust::ui::Ui; use stereokit_rust::util::{Color128, Time}; @@ -204,13 +204,21 @@ fn stereokit_loop( Material::default().shader(Shader::pbr_clip()); Ui::enable_far_interact(false); + let left_hand_material = Material::find("default/material_hand").unwrap(); + let mut right_hand_material = left_hand_material.copy(); + right_hand_material.id("right_hand"); + Input::hand_material(Handed::Right, Some(Material::find("right_hand").unwrap())); + + Input::hand_visible(Handed::Left, false); + Input::hand_visible(Handed::Right, false); + // Skytex/light stuff { if let Some(sky) = project_dirs .as_ref() .map(|dirs| dirs.config_dir().join("skytex.hdr")) .filter(|f| f.exists()) - .and_then(|p| SHCubemap::from_cubemap_equirectangular(p, true, 100).ok()) + .and_then(|p| SHCubemap::from_cubemap(p, true, 100).ok()) { sky.render_as_sky(); } else { @@ -234,6 +242,7 @@ fn stereokit_loop( let mut objects = ServerObjects::new( dbus_connection.clone(), &sk, + [left_hand_material, right_hand_material], args.disable_controllers, args.disable_hands, ); diff --git a/src/nodes/drawable/mod.rs b/src/nodes/drawable/mod.rs index a533a917..a5e38565 100644 --- a/src/nodes/drawable/mod.rs +++ b/src/nodes/drawable/mod.rs @@ -26,12 +26,12 @@ pub fn draw(token: &MainThreadToken) { text::draw_all(token); if let Some(skytex) = QUEUED_SKYTEX.lock().take() { - if let Ok(skytex) = SHCubemap::from_cubemap_equirectangular(skytex, true, 100) { + if let Ok(skytex) = SHCubemap::from_cubemap(skytex, true, 100) { Renderer::skytex(skytex.tex); } } if let Some(skylight) = QUEUED_SKYLIGHT.lock().take() { - if let Ok(skylight) = SHCubemap::from_cubemap_equirectangular(skylight, true, 100) { + if let Ok(skylight) = SHCubemap::from_cubemap(skylight, true, 100) { Renderer::skylight(skylight.sh); } } diff --git a/src/objects/input/sk_hand.rs b/src/objects/input/sk_hand.rs index 49c44c3d..5b7090ed 100644 --- a/src/objects/input/sk_hand.rs +++ b/src/objects/input/sk_hand.rs @@ -13,6 +13,7 @@ use glam::{Mat4, Quat, Vec3}; use serde::{Deserialize, Serialize}; use stardust_xr::values::Datamap; use std::sync::Arc; +use stereokit_rust::material::Material; use stereokit_rust::sk::{DisplayMode, MainThreadToken, Sk}; use stereokit_rust::system::{HandJoint, HandSource, Handed, Input, LinePoint, Lines}; use stereokit_rust::util::Color128; @@ -62,8 +63,8 @@ impl SkHand { }); let datamap = Datamap::from_typed(HandDatamap::default())?; let input = InputMethod::add_to(&_node.0, hand, datamap)?; + Input::hand_visible(handed, true); - Input::hand_visible(handed, false); Ok(SkHand { _node, palm_spatial, @@ -74,7 +75,7 @@ impl SkHand { datamap: Default::default(), }) } - pub fn update(&mut self, sk: &Sk, token: &MainThreadToken) { + pub fn update(&mut self, sk: &Sk, token: &MainThreadToken, material: &mut Material) { let sk_hand = Input::hand(self.handed); let real_hand = Input::hand_source(self.handed) as u32 == HandSource::Articulated as u32; if let InputDataType::Hand(hand) = &mut *self.input.data.lock() { @@ -121,15 +122,12 @@ impl SkHand { hand.elbow = None; - self.draw( - token, - if self.capture_manager.capture.is_none() { - Color128::new_rgb(1.0, 1.0, 1.0) - } else { - Color128::new_rgb(0.0, 1.0, 0.75) - }, - hand, - ); + let hand_color = if self.capture_manager.capture.is_none() { + Color128::new_rgb(1.0, 1.0, 1.0) + } else { + Color128::new_rgb(0.0, 1.0, 0.75) + }; + material.color_tint(hand_color); } } self.datamap.pinch_strength = sk_hand.pinch_activation; @@ -165,76 +163,10 @@ impl SkHand { let sorted_handlers = get_sorted_handlers(&self.input, distance_calculator); self.input.set_handler_order(sorted_handlers.iter()); } - - fn draw(&self, token: &MainThreadToken, color: Color128, hand: &Hand) { - // thumb - Lines::add_list( - token, - &[ - joint_to_line_point(&hand.thumb.tip, color), - joint_to_line_point(&hand.thumb.distal, color), - joint_to_line_point(&hand.thumb.proximal, color), - joint_to_line_point(&hand.thumb.metacarpal, color), - ], - ); - // index - Lines::add_list( - token, - &[ - joint_to_line_point(&hand.index.tip, color), - joint_to_line_point(&hand.index.distal, color), - joint_to_line_point(&hand.index.intermediate, color), - joint_to_line_point(&hand.index.proximal, color), - joint_to_line_point(&hand.index.metacarpal, color), - ], - ); - // middle - Lines::add_list( - token, - &[ - joint_to_line_point(&hand.middle.tip, color), - joint_to_line_point(&hand.middle.distal, color), - joint_to_line_point(&hand.middle.intermediate, color), - joint_to_line_point(&hand.middle.proximal, color), - joint_to_line_point(&hand.middle.metacarpal, color), - ], - ); - // ring - Lines::add_list( - token, - &[ - joint_to_line_point(&hand.ring.tip, color), - joint_to_line_point(&hand.ring.distal, color), - joint_to_line_point(&hand.ring.intermediate, color), - joint_to_line_point(&hand.ring.proximal, color), - joint_to_line_point(&hand.ring.metacarpal, color), - ], - ); - // little - Lines::add_list( - token, - &[ - joint_to_line_point(&hand.little.tip, color), - joint_to_line_point(&hand.little.distal, color), - joint_to_line_point(&hand.little.intermediate, color), - joint_to_line_point(&hand.little.proximal, color), - joint_to_line_point(&hand.little.metacarpal, color), - ], - ); - - // palm - Lines::add_list( - token, - &[ - joint_to_line_point(&hand.wrist, color), - joint_to_line_point(&hand.thumb.metacarpal, color), - joint_to_line_point(&hand.index.metacarpal, color), - joint_to_line_point(&hand.middle.metacarpal, color), - joint_to_line_point(&hand.ring.metacarpal, color), - joint_to_line_point(&hand.little.metacarpal, color), - joint_to_line_point(&hand.wrist, color), - ], - ); +} +impl Drop for SkHand { + fn drop(&mut self) { + Input::hand_visible(self.handed, false); } } diff --git a/src/objects/mod.rs b/src/objects/mod.rs index 4e65854e..7ba9011e 100644 --- a/src/objects/mod.rs +++ b/src/objects/mod.rs @@ -16,6 +16,7 @@ use input::{ use play_space::PlaySpaceBounds; use std::{marker::PhantomData, sync::Arc}; use stereokit_rust::{ + material::Material, sk::{DisplayMode, MainThreadToken, Sk}, system::{Handed, Input, Key, World}, util::Device, @@ -45,6 +46,7 @@ pub struct ServerObjects { connection: Connection, hmd: (Arc, ObjectHandle), play_space: Option<(Arc, ObjectHandle)>, + hand_materials: [Material; 2], inputs: Inputs, disable_controllers: bool, disable_hands: bool, @@ -53,6 +55,7 @@ impl ServerObjects { pub fn new( connection: Connection, sk: &Sk, + hand_materials: [Material; 2], disable_controllers: bool, disable_hands: bool, ) -> ServerObjects { @@ -106,6 +109,7 @@ impl ServerObjects { connection, hmd, play_space, + hand_materials, inputs, disable_controllers, disable_hands, @@ -132,6 +136,7 @@ impl ServerObjects { )); } + #[allow(clippy::collapsible_if)] if sk.get_active_display_mode() != DisplayMode::MixedReality { if Input::key(Key::F6).is_just_inactive() { self.inputs = Inputs::MousePointer(MousePointer::new().unwrap()); @@ -142,12 +147,12 @@ impl ServerObjects { // SkController::new(Handed::Right).unwrap(), // )); // } - if Input::key(Key::F8).is_just_inactive() { - self.inputs = Inputs::Hands { - left: SkHand::new(&self.connection, Handed::Left).unwrap(), - right: SkHand::new(&self.connection, Handed::Right).unwrap(), - }; - } + // if Input::key(Key::F8).is_just_inactive() { + // self.inputs = Inputs::Hands { + // left: SkHand::new(&self.connection, Handed::Left).unwrap(), + // right: SkHand::new(&self.connection, Handed::Right).unwrap(), + // }; + // } } match &mut self.inputs { @@ -162,9 +167,11 @@ impl ServerObjects { controller_left.update(token); controller_right.update(token); } + Input::hand_visible(Handed::Left, !self.disable_hands); + Input::hand_visible(Handed::Right, !self.disable_hands); if !self.disable_hands { - hand_left.update(sk, token); - hand_right.update(sk, token); + hand_left.update(sk, token, &mut self.hand_materials[0]); + hand_right.update(sk, token, &mut self.hand_materials[1]); } if let Some(eye_pointer) = eye_pointer { eye_pointer.update(); @@ -176,8 +183,8 @@ impl ServerObjects { // right.update(token); // } Inputs::Hands { left, right } => { - left.update(sk, token); - right.update(sk, token); + left.update(sk, token, &mut self.hand_materials[0]); + right.update(sk, token, &mut self.hand_materials[1]); } } }