From 6474394f49b67377c9fef66f51af61f108ae3cce Mon Sep 17 00:00:00 2001 From: HampusM Date: Thu, 23 Apr 2026 03:07:01 +0200 Subject: refactor(engine): remove support for multiple renderer contexts --- engine/src/renderer/object.rs | 52 +++++++++++++++++-------------------------- 1 file changed, 21 insertions(+), 31 deletions(-) (limited to 'engine/src/renderer/object.rs') diff --git a/engine/src/renderer/object.rs b/engine/src/renderer/object.rs index 13be4a4..bdff885 100644 --- a/engine/src/renderer/object.rs +++ b/engine/src/renderer/object.rs @@ -1,8 +1,7 @@ use std::collections::HashMap; -use std::collections::hash_map::Entry as HashMapEntry; use std::sync::atomic::{AtomicU64, Ordering}; -use ecs::Component; +use ecs::Sole; use crate::asset::Id as AssetId; @@ -26,23 +25,31 @@ impl Id NEXT_SEQUENTIAL_ID.fetch_add(1, Ordering::Relaxed), )) } + + pub fn into_asset_id(self) -> Option + { + match self { + Self::Asset(asset_id) => Some(asset_id), + Self::Sequential(_) => None, + } + } } #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct SequentialId(u64); /// Renderer object store. -#[derive(Debug, Default, Component)] +#[derive(Debug, Default, Sole)] pub struct Store { - objects: HashMap, + objects: HashMap>, } impl Store { pub fn get_obj(&self, id: &Id) -> Option<&Object> { - self.objects.get(id) + self.objects.get(id).and_then(|obj| obj.as_ref()) } pub fn get_texture_obj(&self, id: &Id) -> Option<&Object> @@ -67,46 +74,29 @@ impl Store Some(obj) } - pub fn contains_with_id(&self, id: &Id) -> bool + pub fn contains_maybe_pending_with_id(&self, id: &Id) -> bool { self.objects.contains_key(id) } - pub fn insert(&mut self, id: Id, object: Object) - { - self.objects.insert(id, object); - } - - pub fn remove(&mut self, id: &Id) -> Option + pub fn contains_non_pending_with_id(&self, id: &Id) -> bool { - self.objects.remove(id) + self.objects.get(id).and_then(|obj| obj.as_ref()).is_some() } - pub fn entry(&mut self, id: Id) -> StoreEntry<'_> + pub fn insert(&mut self, id: Id, object: Object) { - StoreEntry { inner: self.objects.entry(id) } + self.objects.insert(id, Some(object)); } -} - -#[derive(Debug)] -pub struct StoreEntry<'store> -{ - inner: HashMapEntry<'store, Id, Object>, -} -impl<'store> StoreEntry<'store> -{ - pub fn or_insert(self, default_obj: Object) -> &'store mut Object + pub fn insert_pending(&mut self, id: Id) { - self.inner.or_insert(default_obj) + self.objects.insert(id, None); } - pub fn or_insert_with( - self, - default_func: impl FnOnce() -> Object, - ) -> &'store mut Object + pub fn remove(&mut self, id: &Id) -> Option> { - self.inner.or_insert_with(default_func) + self.objects.remove(id) } } -- cgit v1.2.3-18-g5258