Avoid to use Arc for not Send/Sync reference
Some checks failed
Build legacy Nix package on Ubuntu / build (push) Failing after 10m8s
Some checks failed
Build legacy Nix package on Ubuntu / build (push) Failing after 10m8s
This commit is contained in:
parent
1568223b9d
commit
1aa2dcc55d
3 changed files with 16 additions and 12 deletions
|
@ -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 {
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue