diff options
Diffstat (limited to 'client/src/scene_prepare.rs')
-rw-r--r-- | client/src/scene_prepare.rs | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/client/src/scene_prepare.rs b/client/src/scene_prepare.rs index cee55f7..5c5102d 100644 --- a/client/src/scene_prepare.rs +++ b/client/src/scene_prepare.rs @@ -17,6 +17,7 @@ use crate::download::Downloader; use anyhow::Result; use egui::{Grid, Widget}; +use humansize::DECIMAL; use image::ImageReader; use log::debug; use std::{ @@ -45,6 +46,7 @@ pub struct DemandMap<K, V> { struct DemandMapState<K, V> { values: HashMap<K, V>, needed: HashSet<K>, + size_metric: usize, } impl<K: Hash + Eq + Clone, V: Clone> DemandMap<K, V> { pub fn new() -> Self { @@ -52,6 +54,7 @@ impl<K: Hash + Eq + Clone, V: Clone> DemandMap<K, V> { inner: DemandMapState { needed: HashSet::new(), values: HashMap::new(), + size_metric: 0, } .into(), } @@ -59,10 +62,11 @@ impl<K: Hash + Eq + Clone, V: Clone> DemandMap<K, V> { pub fn needed(&self) -> Vec<K> { self.inner.read().unwrap().needed.iter().cloned().collect() } - pub fn insert(&self, key: K, value: V) { + pub fn insert(&self, key: K, value: V, size: usize) { let mut s = self.inner.write().unwrap(); s.needed.remove(&key); s.values.insert(key, value); + s.size_metric += size; } pub fn try_get(&self, key: K) -> Option<V> { let mut s = self.inner.write().unwrap(); @@ -127,7 +131,7 @@ impl ScenePreparer { } } if rprefab.0.len() == prefab.mesh.len() { - self.prefabs.insert(pres.clone(), Arc::new(rprefab)); + self.prefabs.insert(pres.clone(), Arc::new(rprefab), 0); debug!("prefab created ({pres})"); num_done += 1; } @@ -149,6 +153,7 @@ impl ScenePreparer { self.index_buffers.insert( pres.clone(), (Arc::new(buffer), (buf.len() / size_of::<u32>()) as u32), + buf.len(), ); debug!( "index buffer created (len={}, took {:?}) {pres}", @@ -173,6 +178,7 @@ impl ScenePreparer { self.vertex_buffers.insert( pres.clone(), (Arc::new(buffer), (buf.len() / size_of::<f32>()) as u32), + buf.len(), ); debug!( "vertex attribute buffer created (len={}, took {:?}) {pres}", @@ -198,7 +204,7 @@ impl ScenePreparer { dims.0, dims.1, ); - self.textures.insert(pres.clone(), tex_bg); + self.textures.insert(pres.clone(), tex_bg, image.len()); debug!( "texture created (res={}x{}, took {:?})", dims.0, @@ -218,7 +224,7 @@ impl ScenePreparer { 1, 1, ); - self.placeholder_textures.insert(variant, tex_bg); + self.placeholder_textures.insert(variant, tex_bg, 4); num_done += 1; } for pres in self.mesh_parts.needed() { @@ -294,6 +300,7 @@ impl ScenePreparer { tex_normal, double_sided: part.g_double_sided.is_some(), }), + 0, ); num_done += 1; } @@ -361,6 +368,7 @@ impl<K, V> Widget for &DemandMap<K, V> { let state = self.inner.read().unwrap(); ui.label(state.needed.len().to_string()); ui.label(state.values.len().to_string()); + ui.label(humansize::format_size(state.size_metric, DECIMAL)); ui.end_row(); ui.response() } @@ -369,7 +377,7 @@ impl<K, V> Widget for &DemandMap<K, V> { impl Widget for &ScenePreparer { fn ui(self, ui: &mut egui::Ui) -> egui::Response { Grid::new("sp") - .num_columns(3) + .num_columns(4) .show(ui, |ui| { ui.label("prefabs"); self.prefabs.ui(ui); |