summaryrefslogtreecommitdiff
path: root/engine/src/renderer/object.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-04-23 03:07:01 +0200
committerHampusM <hampus@hampusmat.com>2026-04-23 03:07:01 +0200
commit6474394f49b67377c9fef66f51af61f108ae3cce (patch)
tree60acc11667e315c3226dac82f130361bbec5a834 /engine/src/renderer/object.rs
parent7699a1f498dd41d9abfc907d36e37dfed7a761c0 (diff)
refactor(engine): remove support for multiple renderer contextsHEADmaster
Diffstat (limited to 'engine/src/renderer/object.rs')
-rw-r--r--engine/src/renderer/object.rs52
1 files changed, 21 insertions, 31 deletions
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<AssetId>
+ {
+ 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<Id, Object>,
+ objects: HashMap<Id, Option<Object>>,
}
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<Object>
+ 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<Option<Object>>
{
- self.inner.or_insert_with(default_func)
+ self.objects.remove(id)
}
}