From 1aa2dcc55d235573d65f4174484ceb0f4eef630c Mon Sep 17 00:00:00 2001 From: Florian RICHER Date: Fri, 30 May 2025 22:33:06 +0200 Subject: [PATCH] Avoid to use Arc for not Send/Sync reference --- src/core/app/context.rs | 13 ++++++++----- src/core/app/mod.rs | 13 +++++++------ src/core/input/virtual_input.rs | 2 +- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/core/app/context.rs b/src/core/app/context.rs index 6820613..f7f8ec4 100644 --- a/src/core/app/context.rs +++ b/src/core/app/context.rs @@ -1,4 +1,7 @@ -use std::sync::{Arc, RwLock}; +use std::{ + rc::Rc, + sync::{Arc, RwLock}, +}; use egui_winit_vulkano::Gui; use vulkano::{ @@ -35,19 +38,19 @@ pub struct ApplicationContext { pub window_id: WindowId, // Données mutables partagées avec Arc> - pub vulkano_windows: Arc>, + pub vulkano_windows: Rc>, pub input_manager: Arc>, pub timer: Arc>, - pub gui: Arc>, + pub gui: Rc>, } impl ApplicationContext { pub fn new( vulkan_context: Arc, - vulkano_windows: Arc>, + vulkano_windows: Rc>, input_manager: Arc>, timer: Arc>, - gui: Arc>, + gui: Rc>, event_loop_proxy: EventLoopProxy, window_id: WindowId, ) -> Self { diff --git a/src/core/app/mod.rs b/src/core/app/mod.rs index 1be0e81..0a1b3de 100644 --- a/src/core/app/mod.rs +++ b/src/core/app/mod.rs @@ -1,4 +1,5 @@ use std::collections::HashMap; +use std::rc::Rc; use std::sync::{Arc, RwLock}; use super::render::vulkan_context::VulkanContext; @@ -27,15 +28,15 @@ pub const DEPTH_IMAGE_ID: usize = 0; pub struct App { vulkan_context: Arc, - vulkano_windows: Arc>, - gui: HashMap>>, + vulkano_windows: Rc>, + gui: HashMap>>, scene_manager: HashMap, input_manager: Arc>, timer: Arc>, event_loop_proxy: EventLoopProxy, // Context d'application partagé par fenêtre - architecture unifiée - app_contexts: HashMap>>, + app_contexts: HashMap>>, } impl App { @@ -46,7 +47,7 @@ impl App { ) -> Self { Self { vulkan_context: Arc::new(VulkanContext::new(vulkano_context)), - vulkano_windows: Arc::new(RwLock::new(VulkanoWindows::default())), + vulkano_windows: Rc::new(RwLock::new(VulkanoWindows::default())), gui: HashMap::new(), input_manager: Arc::new(RwLock::new(input_manager)), scene_manager: HashMap::new(), @@ -98,7 +99,7 @@ impl ApplicationHandler for App { }, ) }; - self.gui.insert(window_id, Arc::new(RwLock::new(gui))); + self.gui.insert(window_id, Rc::new(RwLock::new(gui))); let mut scene_manager = SceneManager::new(); scene_manager.load_scene(Box::new(MainScene::default())); @@ -153,7 +154,7 @@ impl ApplicationHandler for App { .app_contexts .entry(id) .or_insert_with(|| { - Arc::new(RwLock::new(ApplicationContext::new( + Rc::new(RwLock::new(ApplicationContext::new( self.vulkan_context.clone(), self.vulkano_windows.clone(), self.input_manager.clone(), diff --git a/src/core/input/virtual_input.rs b/src/core/input/virtual_input.rs index dfab54d..26ac882 100644 --- a/src/core/input/virtual_input.rs +++ b/src/core/input/virtual_input.rs @@ -40,7 +40,7 @@ impl VirtualInput { pub fn get_state(&self, value_name: &str) -> f32 { self.states .get(value_name) - .and_then(|state| Some(state.lock().value)) + .map(|state| state.lock().value) .unwrap_or(0.0) }