From 9e955e75489a74fa9447c1fb6af5f0b6d337c037 Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sat, 8 Nov 2025 15:56:18 -0500 Subject: [PATCH] feat: implement node removal functionality in sdxr_start and add corresponding extern function --- bridge/src/lib.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/bridge/src/lib.rs b/bridge/src/lib.rs index 6afc40d..3523245 100644 --- a/bridge/src/lib.rs +++ b/bridge/src/lib.rs @@ -34,6 +34,7 @@ impl Default for BridgeState { enum Command { Create { c_id: u64, name: String, transform: Mat4 }, Update { c_id: u64, transform: Mat4 }, + Remove { c_id: u64 }, Shutdown, } @@ -179,6 +180,13 @@ pub extern "C" fn sdxr_start(app_id: *const std::os::raw::c_char) -> i32 { } } } + Command::Remove { c_id } => { + if let Ok(mut state) = shared_for_commands.lock() { + if state.nodes.remove(&c_id).is_some() { + println!("[bridge] remove node id={} (remaining={})", c_id, state.nodes.len()); + } + } + } Command::Shutdown => { STOP_REQUESTED.store(true, Ordering::SeqCst); break; } } } @@ -297,6 +305,14 @@ pub extern "C" fn sdxr_update_node(id: u64, mat4: *const f32) -> i32 { 0 } +#[no_mangle] +pub extern "C" fn sdxr_remove_node(id: u64) -> i32 { + if !STARTED.load(Ordering::SeqCst) { return -1; } + let ctrl = CTRL.lock().unwrap(); + if let Some(tx) = &ctrl.tx { let _ = tx.send(Command::Remove { c_id: id }); } + 0 +} + // Optional: expose number of nodes for diagnostics #[no_mangle] pub extern "C" fn sdxr_node_count() -> u64 {