use super::client::WgpuClient;
use super::device::WgpuDevice;
use std::collections::HashMap;
use std::sync::{Mutex, OnceLock};
static CLIENT_CACHE: OnceLock<Mutex<HashMap<usize, WgpuClient>>> = OnceLock::new();
pub(super) fn get_or_create_client(
device: &WgpuDevice,
) -> Result<WgpuClient, super::device::WgpuError> {
let cache = CLIENT_CACHE.get_or_init(|| Mutex::new(HashMap::new()));
let mut cache_guard = cache.lock().unwrap_or_else(|e| e.into_inner());
if let Some(client) = cache_guard.get(&device.index) {
return Ok(client.clone());
}
let client = WgpuClient::new_uncached(device.clone())?;
cache_guard.insert(device.index, client.clone());
Ok(client)
}