Avoid to use Arc for not Send/Sync reference
Some checks failed
Build legacy Nix package on Ubuntu / build (push) Failing after 10m8s

This commit is contained in:
Florian RICHER 2025-05-30 22:33:06 +02:00
parent 1568223b9d
commit 1aa2dcc55d
Signed by: florian.richer
GPG key ID: C73D37CBED7BFC77
3 changed files with 16 additions and 12 deletions

View file

@ -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<Mutex<>>
pub vulkano_windows: Arc<RwLock<VulkanoWindows>>,
pub vulkano_windows: Rc<RwLock<VulkanoWindows>>,
pub input_manager: Arc<RwLock<InputManager>>,
pub timer: Arc<RwLock<Timer>>,
pub gui: Arc<RwLock<Gui>>,
pub gui: Rc<RwLock<Gui>>,
}
impl ApplicationContext {
pub fn new(
vulkan_context: Arc<VulkanContext>,
vulkano_windows: Arc<RwLock<VulkanoWindows>>,
vulkano_windows: Rc<RwLock<VulkanoWindows>>,
input_manager: Arc<RwLock<InputManager>>,
timer: Arc<RwLock<Timer>>,
gui: Arc<RwLock<Gui>>,
gui: Rc<RwLock<Gui>>,
event_loop_proxy: EventLoopProxy<UserEvent>,
window_id: WindowId,
) -> Self {

View file

@ -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<VulkanContext>,
vulkano_windows: Arc<RwLock<VulkanoWindows>>,
gui: HashMap<WindowId, Arc<RwLock<Gui>>>,
vulkano_windows: Rc<RwLock<VulkanoWindows>>,
gui: HashMap<WindowId, Rc<RwLock<Gui>>>,
scene_manager: HashMap<WindowId, SceneManager>,
input_manager: Arc<RwLock<InputManager>>,
timer: Arc<RwLock<Timer>>,
event_loop_proxy: EventLoopProxy<UserEvent>,
// Context d'application partagé par fenêtre - architecture unifiée
app_contexts: HashMap<WindowId, Arc<RwLock<ApplicationContext>>>,
app_contexts: HashMap<WindowId, Rc<RwLock<ApplicationContext>>>,
}
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<UserEvent> 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<UserEvent> 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(),

View file

@ -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)
}