summaryrefslogtreecommitdiff
path: root/client/src/render/scene/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/render/scene/mod.rs')
-rw-r--r--client/src/render/scene/mod.rs60
1 files changed, 3 insertions, 57 deletions
diff --git a/client/src/render/scene/mod.rs b/client/src/render/scene/mod.rs
index e314649..96c8ba4 100644
--- a/client/src/render/scene/mod.rs
+++ b/client/src/render/scene/mod.rs
@@ -14,6 +14,7 @@
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
+pub mod demand_map;
pub mod draw;
pub mod meshops;
pub mod pipelines;
@@ -23,18 +24,12 @@ pub mod vertex_buffers;
use crate::{armature::RArmature, download::Downloader, shaders::SceneShaders};
use anyhow::Result;
use bytemuck::{Pod, Zeroable};
+use demand_map::DemandMap;
use egui::{Grid, Widget};
use glam::{UVec3, UVec4, Vec2, Vec3, Vec3A, uvec3, uvec4};
-use humansize::DECIMAL;
use log::{debug, trace};
use pipelines::SceneBgLayouts;
-use std::{
- collections::{HashMap, HashSet},
- hash::Hash,
- marker::PhantomData,
- sync::{Arc, RwLock},
- time::Instant,
-};
+use std::{hash::Hash, marker::PhantomData, sync::Arc, time::Instant};
use textures::MipGenerationPipeline;
use weareshared::{
Affine3A,
@@ -47,45 +42,6 @@ use wgpu::{
util::{BufferInitDescriptor, DeviceExt},
};
-pub struct DemandMap<K, V> {
- inner: RwLock<DemandMapState<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 {
- Self {
- inner: DemandMapState {
- needed: HashSet::new(),
- values: HashMap::new(),
- size_metric: 0,
- }
- .into(),
- }
- }
- pub fn needed(&self) -> Vec<K> {
- self.inner.read().unwrap().needed.iter().cloned().collect()
- }
- 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();
- if let Some(k) = s.values.get(&key) {
- Some(k.to_owned())
- } else {
- s.needed.insert(key);
- None
- }
- }
-}
-
struct GraphicsConfig {
max_anisotropy: u16,
max_mip_count: u32,
@@ -444,16 +400,6 @@ impl ScenePreparer {
}
}
-impl<K, V> Widget for &DemandMap<K, V> {
- fn ui(self, ui: &mut egui::Ui) -> egui::Response {
- 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()
- }
-}
impl ScenePreparer {
pub fn print_missing(&self) {
fn visit<K, V>(name: &str, m: &DemandMap<K, V>)