From 7be24431d2548817a4ae74059f592d6a3c1c6d62 Mon Sep 17 00:00:00 2001 From: CuddlyBunion341 Date: Thu, 13 Mar 2025 20:32:07 +0100 Subject: [PATCH 01/26] wip --- src/client/terrain/components.rs | 7 +- src/client/terrain/mod.rs | 1 + src/client/terrain/systems.rs | 187 +++++++++++++++--------- src/client/terrain/util/cross_mesher.rs | 2 +- 4 files changed, 128 insertions(+), 69 deletions(-) diff --git a/src/client/terrain/components.rs b/src/client/terrain/components.rs index 69b7183d..56f9f6e3 100644 --- a/src/client/terrain/components.rs +++ b/src/client/terrain/components.rs @@ -1,6 +1,11 @@ -use bevy::ecs::component::Component; +use bevy::{ecs::{component::Component, world::CommandQueue}, math::Vec3, tasks::Task}; + +use super::util::GeometryData; #[derive(Component)] pub struct ChunkMesh { pub key: [i32; 3], } + +#[derive(Component)] +pub struct FutureChunk(pub Task<(Vec3, GeometryData)>); diff --git a/src/client/terrain/mod.rs b/src/client/terrain/mod.rs index 44db79a6..fce8b7ea 100644 --- a/src/client/terrain/mod.rs +++ b/src/client/terrain/mod.rs @@ -28,6 +28,7 @@ impl Plugin for TerrainPlugin { app.insert_resource(terrain_resources::SpawnAreaLoaded(false)); app.add_systems(Startup, terrain_systems::prepare_spawn_area_system); app.add_systems(Startup, terrain_systems::generate_world_system); + app.add_systems(Startup, terrain_systems::handle_future_chunks_system); app.add_systems( Update, terrain_systems::handle_chunk_mesh_update_events_system, diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index fbcd04c6..d533f488 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -1,5 +1,7 @@ +use bevy::{ecs::world::CommandQueue, tasks::{block_on, futures_lite::future, AsyncComputeTaskPool}}; +use terrain_components::FutureChunk; use terrain_resources::RenderMaterials; -use terrain_util::create_cross_mesh_for_chunk; +use terrain_util::{create_cross_geometry_for_chunk, create_cross_mesh_for_chunk, GeometryData}; use crate::prelude::*; @@ -25,9 +27,9 @@ pub fn generate_simple_ground_system( let mesh = Cuboid::new(64.0, 1.0, 64.0); commands.spawn(( - Mesh3d(meshes.add(mesh)), - MeshMaterial3d(materials.add(Color::srgba(1.0, 0.0, 1.0, 1.0))), - Name::new("Simple Ground Plane"), + Mesh3d(meshes.add(mesh)), + MeshMaterial3d(materials.add(Color::srgba(1.0, 0.0, 1.0, 1.0))), + Name::new("Simple Ground Plane"), )); } @@ -91,20 +93,48 @@ pub fn handle_chunk_mesh_update_events_system( commands.entity(entity).despawn(); } } - add_chunk_objects( - &mut commands, - &mut meshes, - chunk, - &texture_manager, - &materials, - ); - add_cross_objects( - &mut commands, - chunk, - &materials, - &texture_manager, - &mut meshes, - ); + // add_chunk_objects( + // &mut commands, + // &mut meshes, + // chunk, + // &texture_manager, + // &materials, + // ); + + let entity = commands.spawn_empty().id(); + let thread_pool = AsyncComputeTaskPool::get(); + + let chunk_position = chunk.position.clone(); + + let task = thread_pool.spawn(async move { + + let geometry_data = create_cross_geometry_for_chunk(chunk, &texture_manager); + + // command_queue.push(move |world: &mut World| { + // world.entity_mut(entity).insert(( + // Mesh3d(mesh_handle), + // MeshMaterial3d( + // transparent_material, + // ), + // Transform::from_xyz( + // chunk_position.x * CHUNK_SIZE as f32, + // chunk_position.y * CHUNK_SIZE as f32, + // chunk_position.z * CHUNK_SIZE as f32, + // ), + // terrain_components::ChunkMesh { + // key: [ + // chunk_position.x as i32, + // chunk_position.y as i32, + // chunk_position.z as i32, + // ], + // }, + // )).remove::(); + // }); + + (chunk_position, geometry_data) + }); + + commands.entity(entity).insert(FutureChunk(task)); } None => { println!("No chunk found"); @@ -113,71 +143,94 @@ pub fn handle_chunk_mesh_update_events_system( } } -fn add_chunk_objects( - commands: &mut Commands, - meshes: &mut ResMut>, - chunk: &Chunk, - texture_manager: &terrain_util::TextureManager, - materials: &RenderMaterials, -) { - if let Some(mesh) = terrain_util::create_chunk_mesh(chunk, texture_manager) { - let material = materials - .chunk_material - .clone() - .expect("Chunk material is loaded"); +pub fn handle_future_chunks_system(mut commands: Commands, mut materials: ResMut>, mut chunks_query: Query<(Entity, &FutureChunk)>) { - let meshes: &mut Mut> = &mut ResMut::reborrow(meshes); - commands.spawn(( - Mesh3d(meshes.add(mesh)), + for (entity, future) in chunks_query.iter() { + + if let Some(mut commands_queue) = block_on(future::poll_once(&mut future.0)) { + + // append the returned command queue to have it execute later + + commands.append(&mut commands_queue); + + } + + commands.entity(entity).insert( + ( Mesh3d(mesh_handle), + MeshMaterial3d( + transparent_material, + ), Transform::from_xyz( - chunk.position.x * CHUNK_SIZE as f32, - chunk.position.y * CHUNK_SIZE as f32, - chunk.position.z * CHUNK_SIZE as f32, + chunk_position.x * CHUNK_SIZE as f32, + chunk_position.y * CHUNK_SIZE as f32, + chunk_position.z * CHUNK_SIZE as f32, ), - MeshMaterial3d(material), - player_components::Raycastable, terrain_components::ChunkMesh { key: [ - chunk.position.x as i32, - chunk.position.y as i32, - chunk.position.z as i32, + chunk_position.x as i32, + chunk_position.y as i32, + chunk_position.z as i32, ], }, - Name::from("Transparent Chunk Mesh"), - )); + ) + ).remove::(); } + + commands.spawn( + insert(( + Mesh3d(mesh_handle), + MeshMaterial3d( + transparent_material, + ), + Transform::from_xyz( + chunk_position.x * CHUNK_SIZE as f32, + chunk_position.y * CHUNK_SIZE as f32, + chunk_position.z * CHUNK_SIZE as f32, + ), + terrain_components::ChunkMesh { + key: [ + chunk_position.x as i32, + chunk_position.y as i32, + chunk_position.z as i32, + ], + }, + )).remove::(); + }); } -fn add_cross_objects( + +fn add_chunk_objects( commands: &mut Commands, + meshes: &mut ResMut>, chunk: &Chunk, - materials: &RenderMaterials, texture_manager: &terrain_util::TextureManager, - meshes: &mut ResMut>, + materials: &RenderMaterials, ) { - if let Some(mesh) = create_cross_mesh_for_chunk(chunk, texture_manager) { - let mesh_handle = meshes.add(mesh); + // create_chunk_mesh is probably the blocker and should be moved to a task queue + if let Some(mesh) = terrain_util::create_chunk_mesh(chunk, texture_manager) { + let material = materials + .chunk_material + .clone() + .expect("Chunk material is loaded"); + let meshes: &mut Mut> = &mut ResMut::reborrow(meshes); commands.spawn(( - Mesh3d(mesh_handle), - MeshMaterial3d( - materials - .transparent_material - .clone() - .expect("Transparent material exists"), - ), - Transform::from_xyz( - chunk.position.x * CHUNK_SIZE as f32, - chunk.position.y * CHUNK_SIZE as f32, - chunk.position.z * CHUNK_SIZE as f32, - ), - terrain_components::ChunkMesh { - key: [ - chunk.position.x as i32, - chunk.position.y as i32, - chunk.position.z as i32, - ], - }, + Mesh3d(meshes.add(mesh)), + Transform::from_xyz( + chunk.position.x * CHUNK_SIZE as f32, + chunk.position.y * CHUNK_SIZE as f32, + chunk.position.z * CHUNK_SIZE as f32, + ), + MeshMaterial3d(material), + player_components::Raycastable, + terrain_components::ChunkMesh { + key: [ + chunk.position.x as i32, + chunk.position.y as i32, + chunk.position.z as i32, + ], + }, + Name::from("Transparent Chunk Mesh"), )); } } diff --git a/src/client/terrain/util/cross_mesher.rs b/src/client/terrain/util/cross_mesher.rs index b3954665..39f4c9d9 100644 --- a/src/client/terrain/util/cross_mesher.rs +++ b/src/client/terrain/util/cross_mesher.rs @@ -14,7 +14,7 @@ pub fn create_cross_mesh_for_chunk( create_cube_mesh_from_data(geometry_data) } -fn create_cross_geometry_for_chunk( +pub fn create_cross_geometry_for_chunk( chunk: &Chunk, texture_manager: &TextureManager, ) -> GeometryData { From 5218b0b7a35ae04ee17ec638450106ee68148c72 Mon Sep 17 00:00:00 2001 From: CuddlyBunion341 Date: Thu, 13 Mar 2025 20:32:15 +0100 Subject: [PATCH 02/26] Add perf data? --- Cargo.lock | 1387 ++++++++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 4 +- perf.data | Bin 0 -> 130016 bytes perf.data.old | Bin 0 -> 130016 bytes 4 files changed, 1383 insertions(+), 8 deletions(-) create mode 100644 perf.data create mode 100644 perf.data.old diff --git a/Cargo.lock b/Cargo.lock index d3ef22d6..85074486 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -77,6 +77,15 @@ dependencies = [ "winit", ] +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + [[package]] name = "adler2" version = "2.0.0" @@ -116,6 +125,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + [[package]] name = "allocator-api2" version = "0.2.21" @@ -192,6 +216,62 @@ dependencies = [ "libc", ] +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +dependencies = [ + "anstyle", + "once_cell", + "windows-sys 0.59.0", +] + +[[package]] +name = "anyhow" +version = "1.0.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" + [[package]] name = "approx" version = "0.4.0" @@ -234,7 +314,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31beedec3ce83ae6da3a79592b3d8d7afd146a5b15bb9bb940279aced60faa89" dependencies = [ - "unicode-width", + "unicode-width 0.1.14", "yansi", ] @@ -298,6 +378,20 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-compression" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "310c9bcae737a48ef5cdee3174184e6d548b292739ede61a1f955ef76a738861" +dependencies = [ + "brotli", + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", +] + [[package]] name = "async-executor" version = "1.13.1" @@ -357,6 +451,21 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object 0.36.7", + "rustc-demangle", + "windows-targets 0.52.6", +] + [[package]] name = "base64" version = "0.21.7" @@ -1517,6 +1626,12 @@ dependencies = [ "winit", ] +[[package]] +name = "binary-merge" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597bb81c80a54b6a4381b23faba8d7774b144c94cbd1d6fe3f1329bd776554ab" + [[package]] name = "bincode" version = "1.3.3" @@ -1638,6 +1753,52 @@ dependencies = [ "piper", ] +[[package]] +name = "blondie" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15ebe57841bd1d5c836041c2b0a18c523dc6a5d9c85a9bb44bdccd091912649c" +dependencies = [ + "object 0.30.4", + "pdb-addr2line", + "rustc-hash 1.1.0", + "symsrv", + "tokio", + "windows 0.44.0", +] + +[[package]] +name = "brotli" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bstr" +version = "1.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" +dependencies = [ + "memchr", + "regex-automata 0.4.9", + "serde", +] + [[package]] name = "bumpalo" version = "3.16.0" @@ -1682,6 +1843,18 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +[[package]] +name = "cab" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae6b4de23c7d39c0631fd3cc952d87951c86c75a13812d7247cb7a896e7b3551" +dependencies = [ + "byteorder", + "flate2", + "lzxd", + "time", +] + [[package]] name = "calloop" version = "0.13.0" @@ -1708,6 +1881,38 @@ dependencies = [ "wayland-client", ] +[[package]] +name = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.11", +] + [[package]] name = "cc" version = "1.2.10" @@ -1822,6 +2027,55 @@ dependencies = [ "libloading", ] +[[package]] +name = "clap" +version = "4.5.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_complete" +version = "4.5.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5c5508ea23c5366f77e53f5a0070e5a84e51687ec3ef9e0464c86dc8d13ce98" +dependencies = [ + "clap", +] + +[[package]] +name = "clap_derive" +version = "4.5.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" + [[package]] name = "clipboard-win" version = "5.4.0" @@ -1838,9 +2092,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" dependencies = [ "termcolor", - "unicode-width", + "unicode-width 0.1.14", ] +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + [[package]] name = "combine" version = "4.6.7" @@ -1860,6 +2120,19 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "console" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width 0.2.0", + "windows-sys 0.59.0", +] + [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -2178,6 +2451,20 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + [[package]] name = "dasp_sample" version = "0.11.0" @@ -2190,6 +2477,26 @@ version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e60eed09d8c01d3cee5b7d30acb059b76614c918fa0f992e0dd6eeb10daad6f" +[[package]] +name = "dbus" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b" +dependencies = [ + "libc", + "libdbus-sys", + "winapi", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + [[package]] name = "derive_more" version = "0.99.18" @@ -2222,12 +2529,43 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + [[package]] name = "dispatch" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "disqualified" version = "1.0.0" @@ -2319,6 +2657,15 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "elsa" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9abf33c656a7256451ebb7d0082c5a471820c31269e49d807c538c252352186e" +dependencies = [ + "stable_deref_trait", +] + [[package]] name = "emath" version = "0.30.0" @@ -2369,6 +2716,21 @@ dependencies = [ "syn", ] +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + [[package]] name = "epaint" version = "0.30.0" @@ -2460,6 +2822,12 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + [[package]] name = "fastrand" version = "2.3.0" @@ -2487,6 +2855,24 @@ version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" +[[package]] +name = "flamegraph" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb73952019394c48c0022b447a7a00545e6797b8a95bb1b217aec9e387a98b02" +dependencies = [ + "anyhow", + "blondie", + "cargo_metadata", + "clap", + "clap_complete", + "indicatif", + "inferno", + "opener", + "shlex", + "signal-hook", +] + [[package]] name = "flate2" version = "1.0.35" @@ -2535,7 +2921,7 @@ checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3" dependencies = [ "fontconfig-parser", "log", - "memmap2", + "memmap2 0.9.5", "slotmap", "tinyvec", "ttf-parser 0.20.0", @@ -2568,6 +2954,15 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + [[package]] name = "futures-channel" version = "0.3.31" @@ -2602,6 +2997,30 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] + [[package]] name = "fuzzy-matcher" version = "0.3.7" @@ -2699,6 +3118,12 @@ dependencies = [ "windows 0.59.0", ] +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + [[package]] name = "gl_generator" version = "0.14.0" @@ -2851,6 +3276,25 @@ dependencies = [ "svg_fmt", ] +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "hash32" version = "0.3.1" @@ -2890,6 +3334,12 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.4.0" @@ -2913,6 +3363,78 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + [[package]] name = "iana-time-zone" version = "0.1.61" @@ -2936,6 +3458,145 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + [[package]] name = "image" version = "0.25.5" @@ -2968,6 +3629,39 @@ dependencies = [ "hashbrown 0.15.2", ] +[[package]] +name = "indicatif" +version = "0.17.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" +dependencies = [ + "console", + "number_prefix", + "portable-atomic", + "unicode-width 0.2.0", + "web-time", +] + +[[package]] +name = "inferno" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692eda1cc790750b9f5a5e3921ef9c117fd5498b97cfacbc910693e5b29002dc" +dependencies = [ + "ahash", + "crossbeam-channel", + "crossbeam-utils", + "dashmap", + "indexmap", + "itoa", + "log", + "num-format", + "once_cell", + "quick-xml 0.37.2", + "rgb", + "str_stack", +] + [[package]] name = "inflections" version = "1.1.1" @@ -3003,6 +3697,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "inplace-vec-builder" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf64c2edc8226891a71f127587a2861b132d2b942310843814d5001d99a1d307" +dependencies = [ + "smallvec", +] + [[package]] name = "io-kit-sys" version = "0.4.1" @@ -3013,6 +3716,18 @@ dependencies = [ "mach2", ] +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "itertools" version = "0.13.0" @@ -3134,6 +3849,16 @@ version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +[[package]] +name = "libdbus-sys" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72" +dependencies = [ + "cc", + "pkg-config", +] + [[package]] name = "libloading" version = "0.8.6" @@ -3177,6 +3902,12 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +[[package]] +name = "litemap" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" + [[package]] name = "litrs" version = "0.4.1" @@ -3199,6 +3930,12 @@ version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +[[package]] +name = "lzxd" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784462f20dddd9dfdb45de963fa4ad4a288cb10a7889ac5d2c34fb6481c6b213" + [[package]] name = "mach2" version = "0.4.2" @@ -3236,12 +3973,27 @@ dependencies = [ "rawpointer", ] +[[package]] +name = "maybe-owned" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" + [[package]] name = "memchr" version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + [[package]] name = "memmap2" version = "0.9.5" @@ -3266,6 +4018,12 @@ dependencies = [ "paste", ] +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -3282,6 +4040,17 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "mio" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + [[package]] name = "naga" version = "23.1.0" @@ -3456,6 +4225,15 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51" +[[package]] +name = "normpath" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8911957c4b1549ac0dc74e30db9c8b0e66ddcd6d7acc33098f4c63a64a6d7ed" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "ntapi" version = "0.4.1" @@ -3494,6 +4272,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-derive" version = "0.4.2" @@ -3505,6 +4289,16 @@ dependencies = [ "syn", ] +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec", + "itoa", +] + [[package]] name = "num-integer" version = "0.1.46" @@ -3556,6 +4350,12 @@ dependencies = [ "syn", ] +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + [[package]] name = "objc" version = "0.2.7" @@ -3768,6 +4568,25 @@ dependencies = [ "objc2-foundation", ] +[[package]] +name = "object" +version = "0.30.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" +dependencies = [ + "flate2", + "memchr", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + [[package]] name = "oboe" version = "0.6.1" @@ -3828,6 +4647,18 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +[[package]] +name = "opener" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0812e5e4df08da354c851a3376fead46db31c2214f849d3de356d774d057681" +dependencies = [ + "bstr", + "dbus", + "normpath", + "windows-sys 0.59.0", +] + [[package]] name = "orbclient" version = "0.3.48" @@ -3922,6 +4753,31 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pdb" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82040a392923abe6279c00ab4aff62d5250d1c8555dc780e4b02783a7aa74863" +dependencies = [ + "fallible-iterator", + "scroll", + "uuid", +] + +[[package]] +name = "pdb-addr2line" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4e89a9f2f40b2389ba6da0814c8044bf942bece03dffa1514f84e3b525f4f9a" +dependencies = [ + "bitflags 1.3.2", + "elsa", + "maybe-owned", + "pdb", + "range-collections", + "thiserror 1.0.69", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -4018,6 +4874,12 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "piper" version = "0.2.4" @@ -4074,6 +4936,18 @@ dependencies = [ "universal-hash", ] +[[package]] +name = "portable-atomic" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "pp-rs" version = "0.2.1" @@ -4147,6 +5021,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "quick-xml" +version = "0.37.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003" +dependencies = [ + "memchr", +] + [[package]] name = "quote" version = "1.0.38" @@ -4247,6 +5130,17 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" +[[package]] +name = "range-collections" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61fdfd79629e2b44a1d34b4d227957174cb858e6b86ee45fad114edbcfc903ab" +dependencies = [ + "binary-merge", + "inplace-vec-builder", + "smallvec", +] + [[package]] name = "rangemap" version = "1.5.1" @@ -4342,6 +5236,17 @@ dependencies = [ "bitflags 2.8.0", ] +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror 1.0.69", +] + [[package]] name = "regex" version = "1.11.1" @@ -4433,6 +5338,72 @@ dependencies = [ "log", ] +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "async-compression", + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-rustls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "rgb" +version = "0.8.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "robust" version = "1.1.0" @@ -4483,6 +5454,7 @@ dependencies = [ "cgmath", "chrono", "egui_plot", + "flamegraph", "iyes_perf_ui", "noise", "rand 0.9.0", @@ -4504,6 +5476,12 @@ dependencies = [ "smallvec", ] +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + [[package]] name = "rustc-hash" version = "1.1.0" @@ -4529,6 +5507,37 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.19" @@ -4597,6 +5606,22 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "scroll" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "sctk-adwaita" version = "0.10.1" @@ -4605,7 +5630,7 @@ checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" dependencies = [ "ab_glyph", "log", - "memmap2", + "memmap2 0.9.5", "smithay-client-toolkit", "tiny-skia", ] @@ -4635,6 +5660,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2fdfc24bc566f839a2da4c4295b82db7d25a24253867d5c64355abb5799bdbe" +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +dependencies = [ + "serde", +] + [[package]] name = "send_wrapper" version = "0.6.0" @@ -4682,6 +5716,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "servo_arc" version = "0.4.0" @@ -4706,6 +5752,25 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + [[package]] name = "simba" version = "0.9.0" @@ -4780,7 +5845,7 @@ dependencies = [ "cursor-icon", "libc", "log", - "memmap2", + "memmap2 0.9.5", "rustix", "thiserror 1.0.69", "wayland-backend", @@ -4802,6 +5867,16 @@ dependencies = [ "serde", ] +[[package]] +name = "socket2" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "spade" version = "2.12.1" @@ -4841,12 +5916,24 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "str_stack" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091b6114800a5f2141aee1d1b9d6ca3592ac062dc5decb3764ec5895a47b4eb" + [[package]] name = "strict-num" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "subtle" version = "2.6.1" @@ -4870,6 +5957,21 @@ dependencies = [ "zeno", ] +[[package]] +name = "symsrv" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328d40bbd6972015696ee86709ccc1327a2529816898f2844a62b71e449b1274" +dependencies = [ + "bytes", + "cab", + "dirs", + "memmap2 0.5.10", + "reqwest", + "thiserror 1.0.69", + "tokio", +] + [[package]] name = "syn" version = "2.0.96" @@ -4881,6 +5983,23 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "sys-locale" version = "0.3.2" @@ -4903,6 +6022,27 @@ dependencies = [ "windows 0.57.0", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "taffy" version = "0.5.2" @@ -4986,6 +6126,25 @@ dependencies = [ "weezl", ] +[[package]] +name = "time" +version = "0.3.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dad298b01a40a23aac4580b67e3dbedb7cc8402f3592d7f49469de2ea4aecdd8" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765c97a5b985b7c11d7bc27fa927dc4fe6af3a6dfb021d28deb60d3bf51e76ef" + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -5020,6 +6179,16 @@ dependencies = [ "strict-num", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" version = "1.8.1" @@ -5035,6 +6204,44 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "tokio" +version = "1.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9975ea0f48b5aa3972bf2d888c238182458437cc2a19374b81b25cdf1023fb3a" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml_datetime" version = "0.6.8" @@ -5052,6 +6259,12 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + [[package]] name = "tracing" version = "0.1.41" @@ -5139,6 +6352,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "ttf-parser" version = "0.20.0" @@ -5233,6 +6452,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + [[package]] name = "unicode-xid" version = "0.2.6" @@ -5249,6 +6474,41 @@ dependencies = [ "subtle", ] +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "uuid" version = "1.12.0" @@ -5287,6 +6547,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -5466,7 +6735,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3" dependencies = [ "proc-macro2", - "quick-xml", + "quick-xml 0.36.2", "quote", ] @@ -5502,6 +6771,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + [[package]] name = "weezl" version = "0.1.8" @@ -5655,6 +6930,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows" version = "0.54.0" @@ -6163,7 +7447,7 @@ dependencies = [ "dpi", "js-sys", "libc", - "memmap2", + "memmap2 0.9.5", "ndk 0.9.0", "objc2", "objc2-app-kit", @@ -6203,6 +7487,16 @@ dependencies = [ "memchr", ] +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "wit-bindgen-rt" version = "0.33.0" @@ -6212,6 +7506,18 @@ dependencies = [ "bitflags 2.8.0", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "x11-dl" version = "2.21.0" @@ -6287,6 +7593,30 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1" +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + [[package]] name = "zeno" version = "0.2.3" @@ -6334,8 +7664,51 @@ dependencies = [ "syn", ] +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + [[package]] name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml index bd618c45..770f3f1b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" rust-version = "1.83.0" [dependencies] -bevy = "0.15.1" +bevy = {version = "0.15.1", features =[ "dynamic_linking"]} bevy_fps_controller = "0.15.0" bevy_mod_raycast = { git = "https://github.com/CuddlyBunion341/bevy_mod_raycast.git", branch = "main" } bevy_rapier3d = "0.28.0" @@ -26,11 +26,13 @@ renet_visualizer = { git = "https://github.com/CuddlyBunion341/renet.git", featu "bevy", ] } egui_plot = "0.30.0" +flamegraph = "0.6.7" [profile.dev.package."*"] opt-level = 3 [profile.release] +debug = true opt-level = 3 [[bin]] diff --git a/perf.data b/perf.data new file mode 100644 index 0000000000000000000000000000000000000000..74ca6832eed06a0d5ebef7966b148a3dd968892e GIT binary patch literal 130016 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 L`ujAmyFvdSbVG+Z literal 0 HcmV?d00001 diff --git a/perf.data.old b/perf.data.old new file mode 100644 index 0000000000000000000000000000000000000000..2a190473e7b859ce55c31d78f2ba412e025051d3 GIT binary patch literal 130016 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 Date: Fri, 14 Mar 2025 13:40:20 +0100 Subject: [PATCH 03/26] Attempt improve performance (crashes instantly) --- src/client/terrain/components.rs | 4 +- src/client/terrain/mod.rs | 2 +- src/client/terrain/systems.rs | 101 ++++++++++-------------------- src/client/terrain/util/blocks.rs | 2 +- 4 files changed, 38 insertions(+), 71 deletions(-) diff --git a/src/client/terrain/components.rs b/src/client/terrain/components.rs index 56f9f6e3..f57f4e31 100644 --- a/src/client/terrain/components.rs +++ b/src/client/terrain/components.rs @@ -1,4 +1,4 @@ -use bevy::{ecs::{component::Component, world::CommandQueue}, math::Vec3, tasks::Task}; +use bevy::{ecs::{component::Component, world::CommandQueue}, math::Vec3, prelude::Mesh, tasks::Task}; use super::util::GeometryData; @@ -8,4 +8,4 @@ pub struct ChunkMesh { } #[derive(Component)] -pub struct FutureChunk(pub Task<(Vec3, GeometryData)>); +pub struct FutureChunk(pub Task<(Vec3, Option)>); diff --git a/src/client/terrain/mod.rs b/src/client/terrain/mod.rs index fce8b7ea..16638d22 100644 --- a/src/client/terrain/mod.rs +++ b/src/client/terrain/mod.rs @@ -28,7 +28,7 @@ impl Plugin for TerrainPlugin { app.insert_resource(terrain_resources::SpawnAreaLoaded(false)); app.add_systems(Startup, terrain_systems::prepare_spawn_area_system); app.add_systems(Startup, terrain_systems::generate_world_system); - app.add_systems(Startup, terrain_systems::handle_future_chunks_system); + app.add_systems(Update, terrain_systems::handle_future_chunks_system); app.add_systems( Update, terrain_systems::handle_chunk_mesh_update_events_system, diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index d533f488..089d4317 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -1,7 +1,7 @@ use bevy::{ecs::world::CommandQueue, tasks::{block_on, futures_lite::future, AsyncComputeTaskPool}}; use terrain_components::FutureChunk; use terrain_resources::RenderMaterials; -use terrain_util::{create_cross_geometry_for_chunk, create_cross_mesh_for_chunk, GeometryData}; +use terrain_util::{create_chunk_mesh, create_cross_geometry_for_chunk, create_cross_mesh_for_chunk, create_cube_geometry_data, create_cube_mesh_from_data, GeometryData}; use crate::prelude::*; @@ -74,7 +74,7 @@ pub fn generate_world_system( pub fn handle_chunk_mesh_update_events_system( mut commands: Commands, mut meshes: ResMut>, - chunk_manager: ResMut, + chunk_manager: Res, mut chunk_mesh_update_events: EventReader, mut mesh_query: Query<(Entity, &terrain_components::ChunkMesh)>, texture_manager: ResMut, @@ -93,45 +93,28 @@ pub fn handle_chunk_mesh_update_events_system( commands.entity(entity).despawn(); } } - // add_chunk_objects( - // &mut commands, - // &mut meshes, - // chunk, - // &texture_manager, - // &materials, - // ); + + //add_cross_chunk_objects( + // &mut commands, + // &mut meshes, + // chunk, + // &texture_manager, + // &materials, + //); let entity = commands.spawn_empty().id(); - let thread_pool = AsyncComputeTaskPool::get(); + let thread_pool = AsyncComputeTaskPool::get(); let chunk_position = chunk.position.clone(); + // TODO: improve performance by not cloning? + let texture_manager = texture_manager.clone(); + let chunk = chunk.clone(); let task = thread_pool.spawn(async move { + let mesh = create_chunk_mesh(&chunk, &texture_manager); + async_std::task::sleep(std::time::Duration::from_millis(0)).await; - let geometry_data = create_cross_geometry_for_chunk(chunk, &texture_manager); - - // command_queue.push(move |world: &mut World| { - // world.entity_mut(entity).insert(( - // Mesh3d(mesh_handle), - // MeshMaterial3d( - // transparent_material, - // ), - // Transform::from_xyz( - // chunk_position.x * CHUNK_SIZE as f32, - // chunk_position.y * CHUNK_SIZE as f32, - // chunk_position.z * CHUNK_SIZE as f32, - // ), - // terrain_components::ChunkMesh { - // key: [ - // chunk_position.x as i32, - // chunk_position.y as i32, - // chunk_position.z as i32, - // ], - // }, - // )).remove::(); - // }); - - (chunk_position, geometry_data) + (chunk_position, mesh) }); commands.entity(entity).insert(FutureChunk(task)); @@ -143,41 +126,24 @@ pub fn handle_chunk_mesh_update_events_system( } } -pub fn handle_future_chunks_system(mut commands: Commands, mut materials: ResMut>, mut chunks_query: Query<(Entity, &FutureChunk)>) { - - for (entity, future) in chunks_query.iter() { - - if let Some(mut commands_queue) = block_on(future::poll_once(&mut future.0)) { - - // append the returned command queue to have it execute later - - commands.append(&mut commands_queue); +pub fn handle_future_chunks_system( + mut commands: Commands, + materials: Res, + mut meshes: ResMut>, + mut chunks_query: Query<(Entity, &mut FutureChunk)>) { + for (entity, mut future) in chunks_query.iter_mut() { + let (chunk_position, mesh_option) = block_on(&mut future.0); + if mesh_option.is_none() { + continue; } + let mesh = mesh_option.unwrap(); + let transparent_material = materials.chunk_material.clone().expect("Material is loaded"); - commands.entity(entity).insert( - ( Mesh3d(mesh_handle), - MeshMaterial3d( - transparent_material, - ), - Transform::from_xyz( - chunk_position.x * CHUNK_SIZE as f32, - chunk_position.y * CHUNK_SIZE as f32, - chunk_position.z * CHUNK_SIZE as f32, - ), - terrain_components::ChunkMesh { - key: [ - chunk_position.x as i32, - chunk_position.y as i32, - chunk_position.z as i32, - ], - }, - ) - ).remove::(); - } + let mesh_handle = meshes.add(mesh); - commands.spawn( - insert(( + commands.entity(entity).insert( + ( Mesh3d(mesh_handle), MeshMaterial3d( transparent_material, @@ -194,8 +160,9 @@ pub fn handle_future_chunks_system(mut commands: Commands, mut materials: ResMut chunk_position.z as i32, ], }, - )).remove::(); - }); + ) + ).remove::(); + } } diff --git a/src/client/terrain/util/blocks.rs b/src/client/terrain/util/blocks.rs index 2c5b5742..f05dfb3a 100644 --- a/src/client/terrain/util/blocks.rs +++ b/src/client/terrain/util/blocks.rs @@ -87,7 +87,7 @@ pub mod client_block { use client_block::block_properties; use TextureName::*; -#[derive(Resource)] +#[derive(Resource, Clone)] pub struct TextureManager { textures: HashMap, } From 71b535411bbf9587e879fc820090392598a4a1ce Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Fri, 14 Mar 2025 13:40:26 +0100 Subject: [PATCH 04/26] Add async std --- Cargo.lock | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++-- Cargo.toml | 1 + 2 files changed, 106 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 85074486..d8c9fb0e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -366,6 +366,17 @@ dependencies = [ "futures-core", ] +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + [[package]] name = "async-channel" version = "2.3.1" @@ -416,6 +427,40 @@ dependencies = [ "futures-lite", ] +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-io", + "async-lock", + "blocking", + "futures-lite", + "once_cell", +] + +[[package]] +name = "async-io" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +dependencies = [ + "async-lock", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "async-lock" version = "3.4.0" @@ -427,6 +472,32 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-std" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" +dependencies = [ + "async-channel 1.9.0", + "async-global-executor", + "async-io", + "async-lock", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + [[package]] name = "async-task" version = "4.7.1" @@ -1299,7 +1370,7 @@ version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b14d77d8ff589743237c98502c0e47fd31059cf348ab86a265c4f90bb5e2a22" dependencies = [ - "async-channel", + "async-channel 2.3.1", "bevy_app", "bevy_asset", "bevy_color", @@ -1447,7 +1518,7 @@ version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c28f2db2619203aa82342dbbe77e49aeea4f933212c0b7a1f285e94c4008e5b" dependencies = [ - "async-channel", + "async-channel 2.3.1", "async-executor", "concurrent-queue", "futures-channel", @@ -1746,7 +1817,7 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel", + "async-channel 2.3.1", "async-task", "futures-io", "futures-lite", @@ -3152,6 +3223,18 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + [[package]] name = "glow" version = "0.14.2" @@ -3826,6 +3909,15 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -3929,6 +4021,9 @@ name = "log" version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +dependencies = [ + "value-bag", +] [[package]] name = "lzxd" @@ -5443,6 +5538,7 @@ checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" name = "rsmc" version = "0.1.1" dependencies = [ + "async-std", "bevy", "bevy-inspector-egui", "bevy_flair", @@ -6525,6 +6621,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" +[[package]] +name = "value-bag" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" + [[package]] name = "vec_map" version = "0.8.2" diff --git a/Cargo.toml b/Cargo.toml index 770f3f1b..54423149 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,6 +27,7 @@ renet_visualizer = { git = "https://github.com/CuddlyBunion341/renet.git", featu ] } egui_plot = "0.30.0" flamegraph = "0.6.7" +async-std = "1.13.0" [profile.dev.package."*"] opt-level = 3 From 2191fc659db1636aa83be1481498f3ef0feef01f Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Fri, 14 Mar 2025 13:43:05 +0100 Subject: [PATCH 05/26] Revert "Add async std" This reverts commit 71b535411bbf9587e879fc820090392598a4a1ce. --- Cargo.lock | 108 ++--------------------------------------------------- Cargo.toml | 1 - 2 files changed, 3 insertions(+), 106 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d8c9fb0e..85074486 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -366,17 +366,6 @@ dependencies = [ "futures-core", ] -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", -] - [[package]] name = "async-channel" version = "2.3.1" @@ -427,40 +416,6 @@ dependencies = [ "futures-lite", ] -[[package]] -name = "async-global-executor" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" -dependencies = [ - "async-channel 2.3.1", - "async-executor", - "async-io", - "async-lock", - "blocking", - "futures-lite", - "once_cell", -] - -[[package]] -name = "async-io" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" -dependencies = [ - "async-lock", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite", - "parking", - "polling", - "rustix", - "slab", - "tracing", - "windows-sys 0.59.0", -] - [[package]] name = "async-lock" version = "3.4.0" @@ -472,32 +427,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-std" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" -dependencies = [ - "async-channel 1.9.0", - "async-global-executor", - "async-io", - "async-lock", - "crossbeam-utils", - "futures-channel", - "futures-core", - "futures-io", - "futures-lite", - "gloo-timers", - "kv-log-macro", - "log", - "memchr", - "once_cell", - "pin-project-lite", - "pin-utils", - "slab", - "wasm-bindgen-futures", -] - [[package]] name = "async-task" version = "4.7.1" @@ -1370,7 +1299,7 @@ version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b14d77d8ff589743237c98502c0e47fd31059cf348ab86a265c4f90bb5e2a22" dependencies = [ - "async-channel 2.3.1", + "async-channel", "bevy_app", "bevy_asset", "bevy_color", @@ -1518,7 +1447,7 @@ version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c28f2db2619203aa82342dbbe77e49aeea4f933212c0b7a1f285e94c4008e5b" dependencies = [ - "async-channel 2.3.1", + "async-channel", "async-executor", "concurrent-queue", "futures-channel", @@ -1817,7 +1746,7 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel 2.3.1", + "async-channel", "async-task", "futures-io", "futures-lite", @@ -3223,18 +3152,6 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" -[[package]] -name = "gloo-timers" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - [[package]] name = "glow" version = "0.14.2" @@ -3909,15 +3826,6 @@ dependencies = [ "bitflags 1.3.2", ] -[[package]] -name = "kv-log-macro" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" -dependencies = [ - "log", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -4021,9 +3929,6 @@ name = "log" version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" -dependencies = [ - "value-bag", -] [[package]] name = "lzxd" @@ -5538,7 +5443,6 @@ checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" name = "rsmc" version = "0.1.1" dependencies = [ - "async-std", "bevy", "bevy-inspector-egui", "bevy_flair", @@ -6621,12 +6525,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "value-bag" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" - [[package]] name = "vec_map" version = "0.8.2" diff --git a/Cargo.toml b/Cargo.toml index 54423149..770f3f1b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,6 @@ renet_visualizer = { git = "https://github.com/CuddlyBunion341/renet.git", featu ] } egui_plot = "0.30.0" flamegraph = "0.6.7" -async-std = "1.13.0" [profile.dev.package."*"] opt-level = 3 From 060f285de2e8f5bfe26b7fd2e83e030c6ce8e83e Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Fri, 14 Mar 2025 13:43:06 +0100 Subject: [PATCH 06/26] Revert "Attempt improve performance (crashes instantly)" This reverts commit 09905bf5383f0da0feb0e06aba1d5b6698c12e4b. --- src/client/terrain/components.rs | 4 +- src/client/terrain/mod.rs | 2 +- src/client/terrain/systems.rs | 101 ++++++++++++++++++++---------- src/client/terrain/util/blocks.rs | 2 +- 4 files changed, 71 insertions(+), 38 deletions(-) diff --git a/src/client/terrain/components.rs b/src/client/terrain/components.rs index f57f4e31..56f9f6e3 100644 --- a/src/client/terrain/components.rs +++ b/src/client/terrain/components.rs @@ -1,4 +1,4 @@ -use bevy::{ecs::{component::Component, world::CommandQueue}, math::Vec3, prelude::Mesh, tasks::Task}; +use bevy::{ecs::{component::Component, world::CommandQueue}, math::Vec3, tasks::Task}; use super::util::GeometryData; @@ -8,4 +8,4 @@ pub struct ChunkMesh { } #[derive(Component)] -pub struct FutureChunk(pub Task<(Vec3, Option)>); +pub struct FutureChunk(pub Task<(Vec3, GeometryData)>); diff --git a/src/client/terrain/mod.rs b/src/client/terrain/mod.rs index 16638d22..fce8b7ea 100644 --- a/src/client/terrain/mod.rs +++ b/src/client/terrain/mod.rs @@ -28,7 +28,7 @@ impl Plugin for TerrainPlugin { app.insert_resource(terrain_resources::SpawnAreaLoaded(false)); app.add_systems(Startup, terrain_systems::prepare_spawn_area_system); app.add_systems(Startup, terrain_systems::generate_world_system); - app.add_systems(Update, terrain_systems::handle_future_chunks_system); + app.add_systems(Startup, terrain_systems::handle_future_chunks_system); app.add_systems( Update, terrain_systems::handle_chunk_mesh_update_events_system, diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index 089d4317..d533f488 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -1,7 +1,7 @@ use bevy::{ecs::world::CommandQueue, tasks::{block_on, futures_lite::future, AsyncComputeTaskPool}}; use terrain_components::FutureChunk; use terrain_resources::RenderMaterials; -use terrain_util::{create_chunk_mesh, create_cross_geometry_for_chunk, create_cross_mesh_for_chunk, create_cube_geometry_data, create_cube_mesh_from_data, GeometryData}; +use terrain_util::{create_cross_geometry_for_chunk, create_cross_mesh_for_chunk, GeometryData}; use crate::prelude::*; @@ -74,7 +74,7 @@ pub fn generate_world_system( pub fn handle_chunk_mesh_update_events_system( mut commands: Commands, mut meshes: ResMut>, - chunk_manager: Res, + chunk_manager: ResMut, mut chunk_mesh_update_events: EventReader, mut mesh_query: Query<(Entity, &terrain_components::ChunkMesh)>, texture_manager: ResMut, @@ -93,28 +93,45 @@ pub fn handle_chunk_mesh_update_events_system( commands.entity(entity).despawn(); } } - - //add_cross_chunk_objects( - // &mut commands, - // &mut meshes, - // chunk, - // &texture_manager, - // &materials, - //); + // add_chunk_objects( + // &mut commands, + // &mut meshes, + // chunk, + // &texture_manager, + // &materials, + // ); let entity = commands.spawn_empty().id(); - let thread_pool = AsyncComputeTaskPool::get(); + let thread_pool = AsyncComputeTaskPool::get(); let chunk_position = chunk.position.clone(); - // TODO: improve performance by not cloning? - let texture_manager = texture_manager.clone(); - let chunk = chunk.clone(); let task = thread_pool.spawn(async move { - let mesh = create_chunk_mesh(&chunk, &texture_manager); - async_std::task::sleep(std::time::Duration::from_millis(0)).await; - (chunk_position, mesh) + let geometry_data = create_cross_geometry_for_chunk(chunk, &texture_manager); + + // command_queue.push(move |world: &mut World| { + // world.entity_mut(entity).insert(( + // Mesh3d(mesh_handle), + // MeshMaterial3d( + // transparent_material, + // ), + // Transform::from_xyz( + // chunk_position.x * CHUNK_SIZE as f32, + // chunk_position.y * CHUNK_SIZE as f32, + // chunk_position.z * CHUNK_SIZE as f32, + // ), + // terrain_components::ChunkMesh { + // key: [ + // chunk_position.x as i32, + // chunk_position.y as i32, + // chunk_position.z as i32, + // ], + // }, + // )).remove::(); + // }); + + (chunk_position, geometry_data) }); commands.entity(entity).insert(FutureChunk(task)); @@ -126,24 +143,41 @@ pub fn handle_chunk_mesh_update_events_system( } } -pub fn handle_future_chunks_system( - mut commands: Commands, - materials: Res, - mut meshes: ResMut>, - mut chunks_query: Query<(Entity, &mut FutureChunk)>) { - for (entity, mut future) in chunks_query.iter_mut() { - let (chunk_position, mesh_option) = block_on(&mut future.0); +pub fn handle_future_chunks_system(mut commands: Commands, mut materials: ResMut>, mut chunks_query: Query<(Entity, &FutureChunk)>) { - if mesh_option.is_none() { - continue; - } - let mesh = mesh_option.unwrap(); - let transparent_material = materials.chunk_material.clone().expect("Material is loaded"); + for (entity, future) in chunks_query.iter() { + + if let Some(mut commands_queue) = block_on(future::poll_once(&mut future.0)) { - let mesh_handle = meshes.add(mesh); + // append the returned command queue to have it execute later + + commands.append(&mut commands_queue); + + } commands.entity(entity).insert( - ( + ( Mesh3d(mesh_handle), + MeshMaterial3d( + transparent_material, + ), + Transform::from_xyz( + chunk_position.x * CHUNK_SIZE as f32, + chunk_position.y * CHUNK_SIZE as f32, + chunk_position.z * CHUNK_SIZE as f32, + ), + terrain_components::ChunkMesh { + key: [ + chunk_position.x as i32, + chunk_position.y as i32, + chunk_position.z as i32, + ], + }, + ) + ).remove::(); + } + + commands.spawn( + insert(( Mesh3d(mesh_handle), MeshMaterial3d( transparent_material, @@ -160,9 +194,8 @@ pub fn handle_future_chunks_system( chunk_position.z as i32, ], }, - ) - ).remove::(); - } + )).remove::(); + }); } diff --git a/src/client/terrain/util/blocks.rs b/src/client/terrain/util/blocks.rs index f05dfb3a..2c5b5742 100644 --- a/src/client/terrain/util/blocks.rs +++ b/src/client/terrain/util/blocks.rs @@ -87,7 +87,7 @@ pub mod client_block { use client_block::block_properties; use TextureName::*; -#[derive(Resource, Clone)] +#[derive(Resource)] pub struct TextureManager { textures: HashMap, } From dfba6e8140df3a510830eaba34b5db7c4e2f7091 Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Fri, 14 Mar 2025 13:43:08 +0100 Subject: [PATCH 07/26] Revert "Add perf data?" This reverts commit 5218b0b7a35ae04ee17ec638450106ee68148c72. --- Cargo.lock | 1393 +------------------------------------------------ Cargo.toml | 4 +- perf.data | Bin 130016 -> 0 bytes perf.data.old | Bin 130016 -> 0 bytes 4 files changed, 11 insertions(+), 1386 deletions(-) delete mode 100644 perf.data delete mode 100644 perf.data.old diff --git a/Cargo.lock b/Cargo.lock index 85074486..d3ef22d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -77,15 +77,6 @@ dependencies = [ "winit", ] -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - [[package]] name = "adler2" version = "2.0.0" @@ -125,21 +116,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - [[package]] name = "allocator-api2" version = "0.2.21" @@ -216,62 +192,6 @@ dependencies = [ "libc", ] -[[package]] -name = "anstream" -version = "0.6.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" - -[[package]] -name = "anstyle-parse" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" -dependencies = [ - "anstyle", - "once_cell", - "windows-sys 0.59.0", -] - -[[package]] -name = "anyhow" -version = "1.0.97" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" - [[package]] name = "approx" version = "0.4.0" @@ -314,7 +234,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31beedec3ce83ae6da3a79592b3d8d7afd146a5b15bb9bb940279aced60faa89" dependencies = [ - "unicode-width 0.1.14", + "unicode-width", "yansi", ] @@ -378,20 +298,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-compression" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "310c9bcae737a48ef5cdee3174184e6d548b292739ede61a1f955ef76a738861" -dependencies = [ - "brotli", - "flate2", - "futures-core", - "memchr", - "pin-project-lite", - "tokio", -] - [[package]] name = "async-executor" version = "1.13.1" @@ -451,21 +357,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" -[[package]] -name = "backtrace" -version = "0.3.74" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object 0.36.7", - "rustc-demangle", - "windows-targets 0.52.6", -] - [[package]] name = "base64" version = "0.21.7" @@ -1626,12 +1517,6 @@ dependencies = [ "winit", ] -[[package]] -name = "binary-merge" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597bb81c80a54b6a4381b23faba8d7774b144c94cbd1d6fe3f1329bd776554ab" - [[package]] name = "bincode" version = "1.3.3" @@ -1753,52 +1638,6 @@ dependencies = [ "piper", ] -[[package]] -name = "blondie" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15ebe57841bd1d5c836041c2b0a18c523dc6a5d9c85a9bb44bdccd091912649c" -dependencies = [ - "object 0.30.4", - "pdb-addr2line", - "rustc-hash 1.1.0", - "symsrv", - "tokio", - "windows 0.44.0", -] - -[[package]] -name = "brotli" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bstr" -version = "1.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" -dependencies = [ - "memchr", - "regex-automata 0.4.9", - "serde", -] - [[package]] name = "bumpalo" version = "3.16.0" @@ -1843,18 +1682,6 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" -[[package]] -name = "cab" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae6b4de23c7d39c0631fd3cc952d87951c86c75a13812d7247cb7a896e7b3551" -dependencies = [ - "byteorder", - "flate2", - "lzxd", - "time", -] - [[package]] name = "calloop" version = "0.13.0" @@ -1881,38 +1708,6 @@ dependencies = [ "wayland-client", ] -[[package]] -name = "camino" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror 2.0.11", -] - [[package]] name = "cc" version = "1.2.10" @@ -2027,55 +1822,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "clap" -version = "4.5.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_complete" -version = "4.5.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5c5508ea23c5366f77e53f5a0070e5a84e51687ec3ef9e0464c86dc8d13ce98" -dependencies = [ - "clap", -] - -[[package]] -name = "clap_derive" -version = "4.5.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "clap_lex" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" - [[package]] name = "clipboard-win" version = "5.4.0" @@ -2092,15 +1838,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" dependencies = [ "termcolor", - "unicode-width 0.1.14", + "unicode-width", ] -[[package]] -name = "colorchoice" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" - [[package]] name = "combine" version = "4.6.7" @@ -2120,19 +1860,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "console" -version = "0.15.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" -dependencies = [ - "encode_unicode", - "libc", - "once_cell", - "unicode-width 0.2.0", - "windows-sys 0.59.0", -] - [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -2451,20 +2178,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" -[[package]] -name = "dashmap" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", -] - [[package]] name = "dasp_sample" version = "0.11.0" @@ -2477,26 +2190,6 @@ version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e60eed09d8c01d3cee5b7d30acb059b76614c918fa0f992e0dd6eeb10daad6f" -[[package]] -name = "dbus" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b" -dependencies = [ - "libc", - "libdbus-sys", - "winapi", -] - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", -] - [[package]] name = "derive_more" version = "0.99.18" @@ -2529,43 +2222,12 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "dirs" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - [[package]] name = "dispatch" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "disqualified" version = "1.0.0" @@ -2657,15 +2319,6 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" -[[package]] -name = "elsa" -version = "1.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9abf33c656a7256451ebb7d0082c5a471820c31269e49d807c538c252352186e" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "emath" version = "0.30.0" @@ -2716,21 +2369,6 @@ dependencies = [ "syn", ] -[[package]] -name = "encode_unicode" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" - -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] - [[package]] name = "epaint" version = "0.30.0" @@ -2822,12 +2460,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - [[package]] name = "fastrand" version = "2.3.0" @@ -2855,24 +2487,6 @@ version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" -[[package]] -name = "flamegraph" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb73952019394c48c0022b447a7a00545e6797b8a95bb1b217aec9e387a98b02" -dependencies = [ - "anyhow", - "blondie", - "cargo_metadata", - "clap", - "clap_complete", - "indicatif", - "inferno", - "opener", - "shlex", - "signal-hook", -] - [[package]] name = "flate2" version = "1.0.35" @@ -2921,7 +2535,7 @@ checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3" dependencies = [ "fontconfig-parser", "log", - "memmap2 0.9.5", + "memmap2", "slotmap", "tinyvec", "ttf-parser 0.20.0", @@ -2954,15 +2568,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - [[package]] name = "futures-channel" version = "0.3.31" @@ -2997,30 +2602,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-core", - "futures-task", - "pin-project-lite", - "pin-utils", -] - [[package]] name = "fuzzy-matcher" version = "0.3.7" @@ -3118,12 +2699,6 @@ dependencies = [ "windows 0.59.0", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "gl_generator" version = "0.14.0" @@ -3276,25 +2851,6 @@ dependencies = [ "svg_fmt", ] -[[package]] -name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "hash32" version = "0.3.1" @@ -3334,12 +2890,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - [[package]] name = "hermit-abi" version = "0.4.0" @@ -3363,78 +2913,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "0.14.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http", - "hyper", - "rustls", - "tokio", - "tokio-rustls", -] - [[package]] name = "iana-time-zone" version = "0.1.61" @@ -3458,145 +2936,6 @@ dependencies = [ "cc", ] -[[package]] -name = "icu_collections" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locid" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - -[[package]] -name = "icu_normalizer" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "utf16_iter", - "utf8_iter", - "write16", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" - -[[package]] -name = "icu_properties" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_locid_transform", - "icu_properties_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" - -[[package]] -name = "icu_provider" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_provider_macros", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "idna" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - [[package]] name = "image" version = "0.25.5" @@ -3629,39 +2968,6 @@ dependencies = [ "hashbrown 0.15.2", ] -[[package]] -name = "indicatif" -version = "0.17.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" -dependencies = [ - "console", - "number_prefix", - "portable-atomic", - "unicode-width 0.2.0", - "web-time", -] - -[[package]] -name = "inferno" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692eda1cc790750b9f5a5e3921ef9c117fd5498b97cfacbc910693e5b29002dc" -dependencies = [ - "ahash", - "crossbeam-channel", - "crossbeam-utils", - "dashmap", - "indexmap", - "itoa", - "log", - "num-format", - "once_cell", - "quick-xml 0.37.2", - "rgb", - "str_stack", -] - [[package]] name = "inflections" version = "1.1.1" @@ -3697,15 +3003,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "inplace-vec-builder" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf64c2edc8226891a71f127587a2861b132d2b942310843814d5001d99a1d307" -dependencies = [ - "smallvec", -] - [[package]] name = "io-kit-sys" version = "0.4.1" @@ -3716,18 +3013,6 @@ dependencies = [ "mach2", ] -[[package]] -name = "ipnet" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - [[package]] name = "itertools" version = "0.13.0" @@ -3849,16 +3134,6 @@ version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" -[[package]] -name = "libdbus-sys" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72" -dependencies = [ - "cc", - "pkg-config", -] - [[package]] name = "libloading" version = "0.8.6" @@ -3902,12 +3177,6 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" -[[package]] -name = "litemap" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" - [[package]] name = "litrs" version = "0.4.1" @@ -3930,12 +3199,6 @@ version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" -[[package]] -name = "lzxd" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784462f20dddd9dfdb45de963fa4ad4a288cb10a7889ac5d2c34fb6481c6b213" - [[package]] name = "mach2" version = "0.4.2" @@ -3973,27 +3236,12 @@ dependencies = [ "rawpointer", ] -[[package]] -name = "maybe-owned" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" - [[package]] name = "memchr" version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "memmap2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" -dependencies = [ - "libc", -] - [[package]] name = "memmap2" version = "0.9.5" @@ -4018,12 +3266,6 @@ dependencies = [ "paste", ] -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - [[package]] name = "minimal-lexical" version = "0.2.1" @@ -4040,17 +3282,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "mio" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" -dependencies = [ - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", -] - [[package]] name = "naga" version = "23.1.0" @@ -4225,15 +3456,6 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51" -[[package]] -name = "normpath" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8911957c4b1549ac0dc74e30db9c8b0e66ddcd6d7acc33098f4c63a64a6d7ed" -dependencies = [ - "windows-sys 0.59.0", -] - [[package]] name = "ntapi" version = "0.4.1" @@ -4272,12 +3494,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - [[package]] name = "num-derive" version = "0.4.2" @@ -4289,16 +3505,6 @@ dependencies = [ "syn", ] -[[package]] -name = "num-format" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" -dependencies = [ - "arrayvec", - "itoa", -] - [[package]] name = "num-integer" version = "0.1.46" @@ -4350,12 +3556,6 @@ dependencies = [ "syn", ] -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - [[package]] name = "objc" version = "0.2.7" @@ -4568,25 +3768,6 @@ dependencies = [ "objc2-foundation", ] -[[package]] -name = "object" -version = "0.30.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" -dependencies = [ - "flate2", - "memchr", -] - -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - [[package]] name = "oboe" version = "0.6.1" @@ -4647,18 +3828,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" -[[package]] -name = "opener" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0812e5e4df08da354c851a3376fead46db31c2214f849d3de356d774d057681" -dependencies = [ - "bstr", - "dbus", - "normpath", - "windows-sys 0.59.0", -] - [[package]] name = "orbclient" version = "0.3.48" @@ -4753,31 +3922,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "pdb" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82040a392923abe6279c00ab4aff62d5250d1c8555dc780e4b02783a7aa74863" -dependencies = [ - "fallible-iterator", - "scroll", - "uuid", -] - -[[package]] -name = "pdb-addr2line" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e89a9f2f40b2389ba6da0814c8044bf942bece03dffa1514f84e3b525f4f9a" -dependencies = [ - "bitflags 1.3.2", - "elsa", - "maybe-owned", - "pdb", - "range-collections", - "thiserror 1.0.69", -] - [[package]] name = "percent-encoding" version = "2.3.1" @@ -4874,12 +4018,6 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - [[package]] name = "piper" version = "0.2.4" @@ -4936,18 +4074,6 @@ dependencies = [ "universal-hash", ] -[[package]] -name = "portable-atomic" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - [[package]] name = "pp-rs" version = "0.2.1" @@ -5021,15 +4147,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "quick-xml" -version = "0.37.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003" -dependencies = [ - "memchr", -] - [[package]] name = "quote" version = "1.0.38" @@ -5130,17 +4247,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" -[[package]] -name = "range-collections" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61fdfd79629e2b44a1d34b4d227957174cb858e6b86ee45fad114edbcfc903ab" -dependencies = [ - "binary-merge", - "inplace-vec-builder", - "smallvec", -] - [[package]] name = "rangemap" version = "1.5.1" @@ -5236,17 +4342,6 @@ dependencies = [ "bitflags 2.8.0", ] -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom 0.2.15", - "libredox", - "thiserror 1.0.69", -] - [[package]] name = "regex" version = "1.11.1" @@ -5333,75 +4428,9 @@ dependencies = [ name = "renetcode" version = "1.0.0" source = "git+https://github.com/CuddlyBunion341/renet.git#01fce875fab05aabebcb6d1e8725bf15424883a0" -dependencies = [ - "chacha20poly1305", - "log", -] - -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "async-compression", - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "system-configuration", - "tokio", - "tokio-rustls", - "tokio-util", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", - "winreg", -] - -[[package]] -name = "rgb" -version = "0.8.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.15", - "libc", - "untrusted", - "windows-sys 0.52.0", +dependencies = [ + "chacha20poly1305", + "log", ] [[package]] @@ -5454,7 +4483,6 @@ dependencies = [ "cgmath", "chrono", "egui_plot", - "flamegraph", "iyes_perf_ui", "noise", "rand 0.9.0", @@ -5476,12 +4504,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - [[package]] name = "rustc-hash" version = "1.1.0" @@ -5507,37 +4529,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring", - "rustls-webpki", - "sct", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "rustversion" version = "1.0.19" @@ -5606,22 +4597,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scroll" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" - -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "sctk-adwaita" version = "0.10.1" @@ -5630,7 +4605,7 @@ checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" dependencies = [ "ab_glyph", "log", - "memmap2 0.9.5", + "memmap2", "smithay-client-toolkit", "tiny-skia", ] @@ -5660,15 +4635,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2fdfc24bc566f839a2da4c4295b82db7d25a24253867d5c64355abb5799bdbe" -[[package]] -name = "semver" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" -dependencies = [ - "serde", -] - [[package]] name = "send_wrapper" version = "0.6.0" @@ -5716,18 +4682,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - [[package]] name = "servo_arc" version = "0.4.0" @@ -5752,25 +4706,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" -[[package]] -name = "signal-hook" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" -dependencies = [ - "libc", -] - [[package]] name = "simba" version = "0.9.0" @@ -5845,7 +4780,7 @@ dependencies = [ "cursor-icon", "libc", "log", - "memmap2 0.9.5", + "memmap2", "rustix", "thiserror 1.0.69", "wayland-backend", @@ -5867,16 +4802,6 @@ dependencies = [ "serde", ] -[[package]] -name = "socket2" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "spade" version = "2.12.1" @@ -5916,24 +4841,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "str_stack" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9091b6114800a5f2141aee1d1b9d6ca3592ac062dc5decb3764ec5895a47b4eb" - [[package]] name = "strict-num" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - [[package]] name = "subtle" version = "2.6.1" @@ -5957,21 +4870,6 @@ dependencies = [ "zeno", ] -[[package]] -name = "symsrv" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "328d40bbd6972015696ee86709ccc1327a2529816898f2844a62b71e449b1274" -dependencies = [ - "bytes", - "cab", - "dirs", - "memmap2 0.5.10", - "reqwest", - "thiserror 1.0.69", - "tokio", -] - [[package]] name = "syn" version = "2.0.96" @@ -5983,23 +4881,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "synstructure" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "sys-locale" version = "0.3.2" @@ -6022,27 +4903,6 @@ dependencies = [ "windows 0.57.0", ] -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "taffy" version = "0.5.2" @@ -6126,25 +4986,6 @@ dependencies = [ "weezl", ] -[[package]] -name = "time" -version = "0.3.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad298b01a40a23aac4580b67e3dbedb7cc8402f3592d7f49469de2ea4aecdd8" -dependencies = [ - "deranged", - "num-conv", - "powerfmt", - "serde", - "time-core", -] - -[[package]] -name = "time-core" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765c97a5b985b7c11d7bc27fa927dc4fe6af3a6dfb021d28deb60d3bf51e76ef" - [[package]] name = "tiny-keccak" version = "2.0.2" @@ -6179,16 +5020,6 @@ dependencies = [ "strict-num", ] -[[package]] -name = "tinystr" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" -dependencies = [ - "displaydoc", - "zerovec", -] - [[package]] name = "tinyvec" version = "1.8.1" @@ -6204,44 +5035,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" -[[package]] -name = "tokio" -version = "1.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9975ea0f48b5aa3972bf2d888c238182458437cc2a19374b81b25cdf1023fb3a" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "pin-project-lite", - "socket2", - "windows-sys 0.52.0", -] - -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - [[package]] name = "toml_datetime" version = "0.6.8" @@ -6259,12 +5052,6 @@ dependencies = [ "winnow", ] -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - [[package]] name = "tracing" version = "0.1.41" @@ -6352,12 +5139,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - [[package]] name = "ttf-parser" version = "0.20.0" @@ -6452,12 +5233,6 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" -[[package]] -name = "unicode-width" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" - [[package]] name = "unicode-xid" version = "0.2.6" @@ -6474,41 +5249,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "url" -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - [[package]] name = "uuid" version = "1.12.0" @@ -6547,15 +5287,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -6735,7 +5466,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3" dependencies = [ "proc-macro2", - "quick-xml 0.36.2", + "quick-xml", "quote", ] @@ -6771,12 +5502,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - [[package]] name = "weezl" version = "0.1.8" @@ -6930,15 +5655,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" -dependencies = [ - "windows-targets 0.42.2", -] - [[package]] name = "windows" version = "0.54.0" @@ -7447,7 +6163,7 @@ dependencies = [ "dpi", "js-sys", "libc", - "memmap2 0.9.5", + "memmap2", "ndk 0.9.0", "objc2", "objc2-app-kit", @@ -7487,16 +6203,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "wit-bindgen-rt" version = "0.33.0" @@ -7506,18 +6212,6 @@ dependencies = [ "bitflags 2.8.0", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - -[[package]] -name = "writeable" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" - [[package]] name = "x11-dl" version = "2.21.0" @@ -7593,30 +6287,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1" -[[package]] -name = "yoke" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - [[package]] name = "zeno" version = "0.2.3" @@ -7664,51 +6334,8 @@ dependencies = [ "syn", ] -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - [[package]] name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" - -[[package]] -name = "zerovec" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] diff --git a/Cargo.toml b/Cargo.toml index 770f3f1b..bd618c45 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" rust-version = "1.83.0" [dependencies] -bevy = {version = "0.15.1", features =[ "dynamic_linking"]} +bevy = "0.15.1" bevy_fps_controller = "0.15.0" bevy_mod_raycast = { git = "https://github.com/CuddlyBunion341/bevy_mod_raycast.git", branch = "main" } bevy_rapier3d = "0.28.0" @@ -26,13 +26,11 @@ renet_visualizer = { git = "https://github.com/CuddlyBunion341/renet.git", featu "bevy", ] } egui_plot = "0.30.0" -flamegraph = "0.6.7" [profile.dev.package."*"] opt-level = 3 [profile.release] -debug = true opt-level = 3 [[bin]] diff --git a/perf.data b/perf.data deleted file mode 100644 index 74ca6832eed06a0d5ebef7966b148a3dd968892e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130016 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 L`ujAmyFvdSbVG+Z diff --git a/perf.data.old b/perf.data.old deleted file mode 100644 index 2a190473e7b859ce55c31d78f2ba412e025051d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130016 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 Date: Fri, 14 Mar 2025 13:43:09 +0100 Subject: [PATCH 08/26] Revert "wip" This reverts commit 7be24431d2548817a4ae74059f592d6a3c1c6d62. --- src/client/terrain/components.rs | 7 +- src/client/terrain/mod.rs | 1 - src/client/terrain/systems.rs | 187 +++++++++--------------- src/client/terrain/util/cross_mesher.rs | 2 +- 4 files changed, 69 insertions(+), 128 deletions(-) diff --git a/src/client/terrain/components.rs b/src/client/terrain/components.rs index 56f9f6e3..69b7183d 100644 --- a/src/client/terrain/components.rs +++ b/src/client/terrain/components.rs @@ -1,11 +1,6 @@ -use bevy::{ecs::{component::Component, world::CommandQueue}, math::Vec3, tasks::Task}; - -use super::util::GeometryData; +use bevy::ecs::component::Component; #[derive(Component)] pub struct ChunkMesh { pub key: [i32; 3], } - -#[derive(Component)] -pub struct FutureChunk(pub Task<(Vec3, GeometryData)>); diff --git a/src/client/terrain/mod.rs b/src/client/terrain/mod.rs index fce8b7ea..44db79a6 100644 --- a/src/client/terrain/mod.rs +++ b/src/client/terrain/mod.rs @@ -28,7 +28,6 @@ impl Plugin for TerrainPlugin { app.insert_resource(terrain_resources::SpawnAreaLoaded(false)); app.add_systems(Startup, terrain_systems::prepare_spawn_area_system); app.add_systems(Startup, terrain_systems::generate_world_system); - app.add_systems(Startup, terrain_systems::handle_future_chunks_system); app.add_systems( Update, terrain_systems::handle_chunk_mesh_update_events_system, diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index d533f488..fbcd04c6 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -1,7 +1,5 @@ -use bevy::{ecs::world::CommandQueue, tasks::{block_on, futures_lite::future, AsyncComputeTaskPool}}; -use terrain_components::FutureChunk; use terrain_resources::RenderMaterials; -use terrain_util::{create_cross_geometry_for_chunk, create_cross_mesh_for_chunk, GeometryData}; +use terrain_util::create_cross_mesh_for_chunk; use crate::prelude::*; @@ -27,9 +25,9 @@ pub fn generate_simple_ground_system( let mesh = Cuboid::new(64.0, 1.0, 64.0); commands.spawn(( - Mesh3d(meshes.add(mesh)), - MeshMaterial3d(materials.add(Color::srgba(1.0, 0.0, 1.0, 1.0))), - Name::new("Simple Ground Plane"), + Mesh3d(meshes.add(mesh)), + MeshMaterial3d(materials.add(Color::srgba(1.0, 0.0, 1.0, 1.0))), + Name::new("Simple Ground Plane"), )); } @@ -93,48 +91,20 @@ pub fn handle_chunk_mesh_update_events_system( commands.entity(entity).despawn(); } } - // add_chunk_objects( - // &mut commands, - // &mut meshes, - // chunk, - // &texture_manager, - // &materials, - // ); - - let entity = commands.spawn_empty().id(); - let thread_pool = AsyncComputeTaskPool::get(); - - let chunk_position = chunk.position.clone(); - - let task = thread_pool.spawn(async move { - - let geometry_data = create_cross_geometry_for_chunk(chunk, &texture_manager); - - // command_queue.push(move |world: &mut World| { - // world.entity_mut(entity).insert(( - // Mesh3d(mesh_handle), - // MeshMaterial3d( - // transparent_material, - // ), - // Transform::from_xyz( - // chunk_position.x * CHUNK_SIZE as f32, - // chunk_position.y * CHUNK_SIZE as f32, - // chunk_position.z * CHUNK_SIZE as f32, - // ), - // terrain_components::ChunkMesh { - // key: [ - // chunk_position.x as i32, - // chunk_position.y as i32, - // chunk_position.z as i32, - // ], - // }, - // )).remove::(); - // }); - - (chunk_position, geometry_data) - }); - - commands.entity(entity).insert(FutureChunk(task)); + add_chunk_objects( + &mut commands, + &mut meshes, + chunk, + &texture_manager, + &materials, + ); + add_cross_objects( + &mut commands, + chunk, + &materials, + &texture_manager, + &mut meshes, + ); } None => { println!("No chunk found"); @@ -143,94 +113,71 @@ pub fn handle_chunk_mesh_update_events_system( } } -pub fn handle_future_chunks_system(mut commands: Commands, mut materials: ResMut>, mut chunks_query: Query<(Entity, &FutureChunk)>) { - - for (entity, future) in chunks_query.iter() { - - if let Some(mut commands_queue) = block_on(future::poll_once(&mut future.0)) { - - // append the returned command queue to have it execute later - - commands.append(&mut commands_queue); - - } +fn add_chunk_objects( + commands: &mut Commands, + meshes: &mut ResMut>, + chunk: &Chunk, + texture_manager: &terrain_util::TextureManager, + materials: &RenderMaterials, +) { + if let Some(mesh) = terrain_util::create_chunk_mesh(chunk, texture_manager) { + let material = materials + .chunk_material + .clone() + .expect("Chunk material is loaded"); - commands.entity(entity).insert( - ( Mesh3d(mesh_handle), - MeshMaterial3d( - transparent_material, - ), + let meshes: &mut Mut> = &mut ResMut::reborrow(meshes); + commands.spawn(( + Mesh3d(meshes.add(mesh)), Transform::from_xyz( - chunk_position.x * CHUNK_SIZE as f32, - chunk_position.y * CHUNK_SIZE as f32, - chunk_position.z * CHUNK_SIZE as f32, + chunk.position.x * CHUNK_SIZE as f32, + chunk.position.y * CHUNK_SIZE as f32, + chunk.position.z * CHUNK_SIZE as f32, ), + MeshMaterial3d(material), + player_components::Raycastable, terrain_components::ChunkMesh { key: [ - chunk_position.x as i32, - chunk_position.y as i32, - chunk_position.z as i32, + chunk.position.x as i32, + chunk.position.y as i32, + chunk.position.z as i32, ], }, - ) - ).remove::(); + Name::from("Transparent Chunk Mesh"), + )); } - - commands.spawn( - insert(( - Mesh3d(mesh_handle), - MeshMaterial3d( - transparent_material, - ), - Transform::from_xyz( - chunk_position.x * CHUNK_SIZE as f32, - chunk_position.y * CHUNK_SIZE as f32, - chunk_position.z * CHUNK_SIZE as f32, - ), - terrain_components::ChunkMesh { - key: [ - chunk_position.x as i32, - chunk_position.y as i32, - chunk_position.z as i32, - ], - }, - )).remove::(); - }); } - -fn add_chunk_objects( +fn add_cross_objects( commands: &mut Commands, - meshes: &mut ResMut>, chunk: &Chunk, - texture_manager: &terrain_util::TextureManager, materials: &RenderMaterials, + texture_manager: &terrain_util::TextureManager, + meshes: &mut ResMut>, ) { - // create_chunk_mesh is probably the blocker and should be moved to a task queue - if let Some(mesh) = terrain_util::create_chunk_mesh(chunk, texture_manager) { - let material = materials - .chunk_material - .clone() - .expect("Chunk material is loaded"); + if let Some(mesh) = create_cross_mesh_for_chunk(chunk, texture_manager) { + let mesh_handle = meshes.add(mesh); - let meshes: &mut Mut> = &mut ResMut::reborrow(meshes); commands.spawn(( - Mesh3d(meshes.add(mesh)), - Transform::from_xyz( - chunk.position.x * CHUNK_SIZE as f32, - chunk.position.y * CHUNK_SIZE as f32, - chunk.position.z * CHUNK_SIZE as f32, - ), - MeshMaterial3d(material), - player_components::Raycastable, - terrain_components::ChunkMesh { - key: [ - chunk.position.x as i32, - chunk.position.y as i32, - chunk.position.z as i32, - ], - }, - Name::from("Transparent Chunk Mesh"), + Mesh3d(mesh_handle), + MeshMaterial3d( + materials + .transparent_material + .clone() + .expect("Transparent material exists"), + ), + Transform::from_xyz( + chunk.position.x * CHUNK_SIZE as f32, + chunk.position.y * CHUNK_SIZE as f32, + chunk.position.z * CHUNK_SIZE as f32, + ), + terrain_components::ChunkMesh { + key: [ + chunk.position.x as i32, + chunk.position.y as i32, + chunk.position.z as i32, + ], + }, )); } } diff --git a/src/client/terrain/util/cross_mesher.rs b/src/client/terrain/util/cross_mesher.rs index 39f4c9d9..b3954665 100644 --- a/src/client/terrain/util/cross_mesher.rs +++ b/src/client/terrain/util/cross_mesher.rs @@ -14,7 +14,7 @@ pub fn create_cross_mesh_for_chunk( create_cube_mesh_from_data(geometry_data) } -pub fn create_cross_geometry_for_chunk( +fn create_cross_geometry_for_chunk( chunk: &Chunk, texture_manager: &TextureManager, ) -> GeometryData { From 088f1eed368045f9c484e7ba2485eb03acb9c16e Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Sat, 15 Mar 2025 14:55:23 +0100 Subject: [PATCH 09/26] wip --- src/client/terrain/mod.rs | 1 + src/client/terrain/resources.rs | 17 ++++++++++++ src/client/terrain/systems.rs | 47 +++++++++------------------------ 3 files changed, 31 insertions(+), 34 deletions(-) diff --git a/src/client/terrain/mod.rs b/src/client/terrain/mod.rs index 44db79a6..a86663e6 100644 --- a/src/client/terrain/mod.rs +++ b/src/client/terrain/mod.rs @@ -14,6 +14,7 @@ impl Plugin for TerrainPlugin { app.insert_resource(ChunkManager::new()); app.insert_resource(util::TextureManager::new()); app.insert_resource(resources::RenderMaterials::new()); + app.insert_resource(resources::MesherTasks::new()); app.add_event::(); app.add_event::(); app.add_event::(); diff --git a/src/client/terrain/resources.rs b/src/client/terrain/resources.rs index 6b78ba78..a4d5beb8 100644 --- a/src/client/terrain/resources.rs +++ b/src/client/terrain/resources.rs @@ -1,3 +1,5 @@ +use bevy::tasks::Task; + use crate::prelude::*; #[derive(Resource)] @@ -9,6 +11,21 @@ impl SpawnAreaLoaded { } } +pub struct MesherTask(pub Task>); + +#[derive(Resource)] +pub struct MesherTasks { + pub task_list: Vec<(Vec3, MesherTask)>, +} + +impl MesherTasks { + pub fn new() -> Self { + MesherTasks { + task_list: Vec::new() + } + } +} + #[derive(Resource)] pub struct RenderMaterials { pub transparent_material: Option>, diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index fbcd04c6..2f3ff798 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -1,4 +1,5 @@ -use terrain_resources::RenderMaterials; +use bevy::tasks::AsyncComputeTaskPool; +use terrain_resources::{MesherTask, RenderMaterials}; use terrain_util::create_cross_mesh_for_chunk; use crate::prelude::*; @@ -91,14 +92,14 @@ pub fn handle_chunk_mesh_update_events_system( commands.entity(entity).despawn(); } } - add_chunk_objects( + create_cube_mesher_task( &mut commands, &mut meshes, chunk, &texture_manager, &materials, ); - add_cross_objects( + create_cross( &mut commands, chunk, &materials, @@ -113,42 +114,20 @@ pub fn handle_chunk_mesh_update_events_system( } } -fn add_chunk_objects( - commands: &mut Commands, - meshes: &mut ResMut>, +fn create_cube_mesher_task( chunk: &Chunk, texture_manager: &terrain_util::TextureManager, - materials: &RenderMaterials, -) { - if let Some(mesh) = terrain_util::create_chunk_mesh(chunk, texture_manager) { - let material = materials - .chunk_material - .clone() - .expect("Chunk material is loaded"); +) -> MesherTask { + let task_pool = AsyncComputeTaskPool::get(); - let meshes: &mut Mut> = &mut ResMut::reborrow(meshes); - commands.spawn(( - Mesh3d(meshes.add(mesh)), - Transform::from_xyz( - chunk.position.x * CHUNK_SIZE as f32, - chunk.position.y * CHUNK_SIZE as f32, - chunk.position.z * CHUNK_SIZE as f32, - ), - MeshMaterial3d(material), - player_components::Raycastable, - terrain_components::ChunkMesh { - key: [ - chunk.position.x as i32, - chunk.position.y as i32, - chunk.position.z as i32, - ], - }, - Name::from("Transparent Chunk Mesh"), - )); - } + let task = task_pool.spawn(async move { + terrain_util::create_chunk_mesh(chunk, texture_manager) + }); + + MesherTask(task) } -fn add_cross_objects( +fn create_cross( commands: &mut Commands, chunk: &Chunk, materials: &RenderMaterials, From 972004d06e35a89aa2481a772ca0768611a897b0 Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Sun, 16 Mar 2025 19:03:16 +0100 Subject: [PATCH 10/26] Implement async! --- src/client/terrain/mod.rs | 4 ++ src/client/terrain/systems.rs | 96 +++++++++++++++++++++++++------ src/client/terrain/util/blocks.rs | 2 +- 3 files changed, 83 insertions(+), 19 deletions(-) diff --git a/src/client/terrain/mod.rs b/src/client/terrain/mod.rs index a86663e6..2d1479b8 100644 --- a/src/client/terrain/mod.rs +++ b/src/client/terrain/mod.rs @@ -37,6 +37,10 @@ impl Plugin for TerrainPlugin { Update, terrain_systems::handle_terrain_regeneration_events_system, ); + app.add_systems( + Update, + terrain_systems::handle_chunk_tasks_system, + ); } } } diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index 2f3ff798..0ae826b9 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -1,5 +1,11 @@ -use bevy::tasks::AsyncComputeTaskPool; -use terrain_resources::{MesherTask, RenderMaterials}; +use std::thread::sleep_ms; + +use bevy::tasks::{ + block_on, + futures_lite::{future, FutureExt}, + AsyncComputeTaskPool, +}; +use terrain_resources::{MesherTask, MesherTasks, RenderMaterials}; use terrain_util::create_cross_mesh_for_chunk; use crate::prelude::*; @@ -78,6 +84,7 @@ pub fn handle_chunk_mesh_update_events_system( mut mesh_query: Query<(Entity, &terrain_components::ChunkMesh)>, texture_manager: ResMut, materials: Res, + mut tasks: ResMut, ) { for event in chunk_mesh_update_events.read() { info!( @@ -92,20 +99,17 @@ pub fn handle_chunk_mesh_update_events_system( commands.entity(entity).despawn(); } } - create_cube_mesher_task( - &mut commands, - &mut meshes, - chunk, - &texture_manager, - &materials, - ); - create_cross( - &mut commands, - chunk, - &materials, - &texture_manager, - &mut meshes, - ); + tasks.task_list.push(( + chunk.position.clone(), + create_cube_mesher_task(chunk, &texture_manager), + )); + // create_cross( + // &mut commands, + // chunk, + // &materials, + // &texture_manager, + // &mut meshes, + // ); } None => { println!("No chunk found"); @@ -120,14 +124,17 @@ fn create_cube_mesher_task( ) -> MesherTask { let task_pool = AsyncComputeTaskPool::get(); + let chunk = chunk.clone(); + let texture_manager = texture_manager.clone(); + let task = task_pool.spawn(async move { - terrain_util::create_chunk_mesh(chunk, texture_manager) + terrain_util::create_chunk_mesh(&chunk, &texture_manager) }); MesherTask(task) } -fn create_cross( +fn create_cross( commands: &mut Commands, chunk: &Chunk, materials: &RenderMaterials, @@ -161,6 +168,59 @@ fn create_cross( } } +pub fn handle_chunk_tasks_system( + mut commands: Commands, + materials: Res, + mut tasks: ResMut, + mut meshes: ResMut>, +) { + let mut filter_indicies: Vec = Vec::new(); + tasks.task_list.iter_mut().enumerate().for_each(|( index, touple)| { + let chunk_position = touple.0; + let mesh_option = bevy::tasks::block_on(future::poll_once(&mut touple.1 .0)); + if mesh_option.is_none() { + return; + } + filter_indicies.push(index); + let mesh_option = mesh_option.unwrap(); + if mesh_option.is_none() { + filter_indicies.push(index); + return; + } + let mesh = mesh_option.expect("Mesh exists"); + let mesh_handle = meshes.add(mesh); + + commands.spawn(( + Mesh3d(mesh_handle), + MeshMaterial3d( + materials + .transparent_material + .clone() + .expect("Transparent material exists"), + ), + Transform::from_xyz( + chunk_position.x * CHUNK_SIZE as f32, + chunk_position.y * CHUNK_SIZE as f32, + chunk_position.z * CHUNK_SIZE as f32, + ), + terrain_components::ChunkMesh { + key: [ + chunk_position.x as i32, + chunk_position.y as i32, + chunk_position.z as i32, + ], + }, + )); + }); + + let mut index = 0; + tasks.task_list.retain(|v| { + let contains = !filter_indicies.contains(&index); + index += 1; + contains + }) +} + fn create_transparent_material(texture_handle: Handle) -> StandardMaterial { StandardMaterial { perceptual_roughness: 1.0, diff --git a/src/client/terrain/util/blocks.rs b/src/client/terrain/util/blocks.rs index 2c5b5742..f05dfb3a 100644 --- a/src/client/terrain/util/blocks.rs +++ b/src/client/terrain/util/blocks.rs @@ -87,7 +87,7 @@ pub mod client_block { use client_block::block_properties; use TextureName::*; -#[derive(Resource)] +#[derive(Resource, Clone)] pub struct TextureManager { textures: HashMap, } From 818290b760b40146a0ab98409f4d45b3f919e8d4 Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Sun, 16 Mar 2025 21:54:02 +0100 Subject: [PATCH 11/26] Refactor mesh generation, fix performance --- src/client/terrain/resources.rs | 14 ++++- src/client/terrain/systems.rs | 102 ++++++++++++++------------------ 2 files changed, 55 insertions(+), 61 deletions(-) diff --git a/src/client/terrain/resources.rs b/src/client/terrain/resources.rs index a4d5beb8..aea84152 100644 --- a/src/client/terrain/resources.rs +++ b/src/client/terrain/resources.rs @@ -11,11 +11,21 @@ impl SpawnAreaLoaded { } } -pub struct MesherTask(pub Task>); +pub enum MeshType { + Solid, + Transparent +} + +pub struct MeshTask(pub Task>); +pub struct FutureChunkMesh { + pub position: Vec3, + pub mesh_task: MeshTask, + pub mesh_type: MeshType +} #[derive(Resource)] pub struct MesherTasks { - pub task_list: Vec<(Vec3, MesherTask)>, + pub task_list: Vec, } impl MesherTasks { diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index 0ae826b9..f3c5d10a 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -5,7 +5,7 @@ use bevy::tasks::{ futures_lite::{future, FutureExt}, AsyncComputeTaskPool, }; -use terrain_resources::{MesherTask, MesherTasks, RenderMaterials}; +use terrain_resources::{FutureChunkMesh, MeshTask, MeshType, MesherTasks, RenderMaterials}; use terrain_util::create_cross_mesh_for_chunk; use crate::prelude::*; @@ -53,7 +53,7 @@ pub fn generate_world_system( mut client: ResMut, mut chunk_manager: ResMut, ) { - let render_distance = Vec3::new(4.0, 4.0, 4.0); + let render_distance = Vec3::new(8.0, 4.0, 8.0); info!("Sending chunk requests for chunks"); @@ -99,17 +99,16 @@ pub fn handle_chunk_mesh_update_events_system( commands.entity(entity).despawn(); } } - tasks.task_list.push(( - chunk.position.clone(), - create_cube_mesher_task(chunk, &texture_manager), - )); - // create_cross( - // &mut commands, - // chunk, - // &materials, - // &texture_manager, - // &mut meshes, - // ); + tasks.task_list.push(FutureChunkMesh{ + position: chunk.position.clone(), + mesh_task: create_cube_mesher_task(chunk, &texture_manager), + mesh_type: terrain_resources::MeshType::Solid + }); + tasks.task_list.push(FutureChunkMesh { + position: chunk.position.clone(), + mesh_task: create_cross_mesher_task(chunk, &texture_manager), + mesh_type: terrain_resources::MeshType::Transparent + }); } None => { println!("No chunk found"); @@ -121,7 +120,7 @@ pub fn handle_chunk_mesh_update_events_system( fn create_cube_mesher_task( chunk: &Chunk, texture_manager: &terrain_util::TextureManager, -) -> MesherTask { +) -> MeshTask { let task_pool = AsyncComputeTaskPool::get(); let chunk = chunk.clone(); @@ -131,41 +130,23 @@ fn create_cube_mesher_task( terrain_util::create_chunk_mesh(&chunk, &texture_manager) }); - MesherTask(task) + MeshTask(task) } -fn create_cross( - commands: &mut Commands, +fn create_cross_mesher_task( chunk: &Chunk, - materials: &RenderMaterials, texture_manager: &terrain_util::TextureManager, - meshes: &mut ResMut>, -) { - if let Some(mesh) = create_cross_mesh_for_chunk(chunk, texture_manager) { - let mesh_handle = meshes.add(mesh); +) -> MeshTask { + let task_pool = AsyncComputeTaskPool::get(); - commands.spawn(( - Mesh3d(mesh_handle), - MeshMaterial3d( - materials - .transparent_material - .clone() - .expect("Transparent material exists"), - ), - Transform::from_xyz( - chunk.position.x * CHUNK_SIZE as f32, - chunk.position.y * CHUNK_SIZE as f32, - chunk.position.z * CHUNK_SIZE as f32, - ), - terrain_components::ChunkMesh { - key: [ - chunk.position.x as i32, - chunk.position.y as i32, - chunk.position.z as i32, - ], - }, - )); - } + let chunk = chunk.clone(); + let texture_manager = texture_manager.clone(); + + let task = task_pool.spawn(async move { + terrain_util::create_cross_mesh_for_chunk(&chunk, &texture_manager) + }); + + MeshTask(task) } pub fn handle_chunk_tasks_system( @@ -174,29 +155,32 @@ pub fn handle_chunk_tasks_system( mut tasks: ResMut, mut meshes: ResMut>, ) { - let mut filter_indicies: Vec = Vec::new(); - tasks.task_list.iter_mut().enumerate().for_each(|( index, touple)| { - let chunk_position = touple.0; - let mesh_option = bevy::tasks::block_on(future::poll_once(&mut touple.1 .0)); - if mesh_option.is_none() { + let mut next_poll_indicies: Vec = Vec::new(); + tasks.task_list.iter_mut().enumerate().for_each(|( index, future_chunk)| { + let chunk_position = future_chunk.position; + let task_result = bevy::tasks::block_on(future::poll_once(&mut future_chunk.mesh_task.0)); + if task_result.is_none() { + // Check next poll + next_poll_indicies.push(index); return; } - filter_indicies.push(index); - let mesh_option = mesh_option.unwrap(); + let mesh_option = task_result.unwrap(); if mesh_option.is_none() { - filter_indicies.push(index); return; } let mesh = mesh_option.expect("Mesh exists"); let mesh_handle = meshes.add(mesh); + let material_handle = match future_chunk.mesh_type { + MeshType::Solid => materials.chunk_material.clone(), + MeshType::Transparent => materials.transparent_material.clone() + }; + commands.spawn(( Mesh3d(mesh_handle), MeshMaterial3d( - materials - .transparent_material - .clone() - .expect("Transparent material exists"), + material_handle + .expect("Material exists"), ), Transform::from_xyz( chunk_position.x * CHUNK_SIZE as f32, @@ -214,9 +198,9 @@ pub fn handle_chunk_tasks_system( }); let mut index = 0; - tasks.task_list.retain(|v| { - let contains = !filter_indicies.contains(&index); - index += 1; + tasks.task_list.retain(|_| { + let contains = next_poll_indicies.contains(&index); + index += 1; contains }) } From 36c81b885bf1e4ba497e728fc9de21c8179054c5 Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Sun, 16 Mar 2025 21:55:20 +0100 Subject: [PATCH 12/26] Fix linter --- src/client/terrain/mod.rs | 5 +- src/client/terrain/resources.rs | 14 ++-- src/client/terrain/systems.rs | 117 +++++++++++++++----------------- 3 files changed, 65 insertions(+), 71 deletions(-) diff --git a/src/client/terrain/mod.rs b/src/client/terrain/mod.rs index 2d1479b8..8c39075d 100644 --- a/src/client/terrain/mod.rs +++ b/src/client/terrain/mod.rs @@ -37,10 +37,7 @@ impl Plugin for TerrainPlugin { Update, terrain_systems::handle_terrain_regeneration_events_system, ); - app.add_systems( - Update, - terrain_systems::handle_chunk_tasks_system, - ); + app.add_systems(Update, terrain_systems::handle_chunk_tasks_system); } } } diff --git a/src/client/terrain/resources.rs b/src/client/terrain/resources.rs index aea84152..f82d96a6 100644 --- a/src/client/terrain/resources.rs +++ b/src/client/terrain/resources.rs @@ -13,14 +13,14 @@ impl SpawnAreaLoaded { pub enum MeshType { Solid, - Transparent -} + Transparent, +} pub struct MeshTask(pub Task>); pub struct FutureChunkMesh { pub position: Vec3, pub mesh_task: MeshTask, - pub mesh_type: MeshType + pub mesh_type: MeshType, } #[derive(Resource)] @@ -28,10 +28,16 @@ pub struct MesherTasks { pub task_list: Vec, } +impl Default for MesherTasks { + fn default() -> Self { + Self::new() + } +} + impl MesherTasks { pub fn new() -> Self { MesherTasks { - task_list: Vec::new() + task_list: Vec::new(), } } } diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index f3c5d10a..eb4f7182 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -1,12 +1,5 @@ -use std::thread::sleep_ms; - -use bevy::tasks::{ - block_on, - futures_lite::{future, FutureExt}, - AsyncComputeTaskPool, -}; +use bevy::tasks::{futures_lite::future, AsyncComputeTaskPool}; use terrain_resources::{FutureChunkMesh, MeshTask, MeshType, MesherTasks, RenderMaterials}; -use terrain_util::create_cross_mesh_for_chunk; use crate::prelude::*; @@ -78,12 +71,10 @@ pub fn generate_world_system( pub fn handle_chunk_mesh_update_events_system( mut commands: Commands, - mut meshes: ResMut>, chunk_manager: ResMut, mut chunk_mesh_update_events: EventReader, mut mesh_query: Query<(Entity, &terrain_components::ChunkMesh)>, texture_manager: ResMut, - materials: Res, mut tasks: ResMut, ) { for event in chunk_mesh_update_events.read() { @@ -99,15 +90,15 @@ pub fn handle_chunk_mesh_update_events_system( commands.entity(entity).despawn(); } } - tasks.task_list.push(FutureChunkMesh{ - position: chunk.position.clone(), + tasks.task_list.push(FutureChunkMesh { + position: chunk.position, mesh_task: create_cube_mesher_task(chunk, &texture_manager), - mesh_type: terrain_resources::MeshType::Solid + mesh_type: terrain_resources::MeshType::Solid, }); tasks.task_list.push(FutureChunkMesh { - position: chunk.position.clone(), + position: chunk.position, mesh_task: create_cross_mesher_task(chunk, &texture_manager), - mesh_type: terrain_resources::MeshType::Transparent + mesh_type: terrain_resources::MeshType::Transparent, }); } None => { @@ -123,12 +114,11 @@ fn create_cube_mesher_task( ) -> MeshTask { let task_pool = AsyncComputeTaskPool::get(); - let chunk = chunk.clone(); + let chunk = *chunk; let texture_manager = texture_manager.clone(); - let task = task_pool.spawn(async move { - terrain_util::create_chunk_mesh(&chunk, &texture_manager) - }); + let task = + task_pool.spawn(async move { terrain_util::create_chunk_mesh(&chunk, &texture_manager) }); MeshTask(task) } @@ -139,12 +129,11 @@ fn create_cross_mesher_task( ) -> MeshTask { let task_pool = AsyncComputeTaskPool::get(); - let chunk = chunk.clone(); + let chunk = *chunk; let texture_manager = texture_manager.clone(); - let task = task_pool.spawn(async move { - terrain_util::create_cross_mesh_for_chunk(&chunk, &texture_manager) - }); + let task = task_pool + .spawn(async move { terrain_util::create_cross_mesh_for_chunk(&chunk, &texture_manager) }); MeshTask(task) } @@ -156,46 +145,48 @@ pub fn handle_chunk_tasks_system( mut meshes: ResMut>, ) { let mut next_poll_indicies: Vec = Vec::new(); - tasks.task_list.iter_mut().enumerate().for_each(|( index, future_chunk)| { - let chunk_position = future_chunk.position; - let task_result = bevy::tasks::block_on(future::poll_once(&mut future_chunk.mesh_task.0)); - if task_result.is_none() { - // Check next poll - next_poll_indicies.push(index); - return; - } - let mesh_option = task_result.unwrap(); - if mesh_option.is_none() { - return; - } - let mesh = mesh_option.expect("Mesh exists"); - let mesh_handle = meshes.add(mesh); - - let material_handle = match future_chunk.mesh_type { - MeshType::Solid => materials.chunk_material.clone(), - MeshType::Transparent => materials.transparent_material.clone() - }; - - commands.spawn(( - Mesh3d(mesh_handle), - MeshMaterial3d( - material_handle - .expect("Material exists"), - ), - Transform::from_xyz( - chunk_position.x * CHUNK_SIZE as f32, - chunk_position.y * CHUNK_SIZE as f32, - chunk_position.z * CHUNK_SIZE as f32, - ), - terrain_components::ChunkMesh { - key: [ - chunk_position.x as i32, - chunk_position.y as i32, - chunk_position.z as i32, - ], - }, - )); - }); + tasks + .task_list + .iter_mut() + .enumerate() + .for_each(|(index, future_chunk)| { + let chunk_position = future_chunk.position; + let task_result = + bevy::tasks::block_on(future::poll_once(&mut future_chunk.mesh_task.0)); + if task_result.is_none() { + // Check next poll + next_poll_indicies.push(index); + return; + } + let mesh_option = task_result.unwrap(); + if mesh_option.is_none() { + return; + } + let mesh = mesh_option.expect("Mesh exists"); + let mesh_handle = meshes.add(mesh); + + let material_handle = match future_chunk.mesh_type { + MeshType::Solid => materials.chunk_material.clone(), + MeshType::Transparent => materials.transparent_material.clone(), + }; + + commands.spawn(( + Mesh3d(mesh_handle), + MeshMaterial3d(material_handle.expect("Material exists")), + Transform::from_xyz( + chunk_position.x * CHUNK_SIZE as f32, + chunk_position.y * CHUNK_SIZE as f32, + chunk_position.z * CHUNK_SIZE as f32, + ), + terrain_components::ChunkMesh { + key: [ + chunk_position.x as i32, + chunk_position.y as i32, + chunk_position.z as i32, + ], + }, + )); + }); let mut index = 0; tasks.task_list.retain(|_| { From 6d5499ad01cc45bd769db4370131d71deff3d78b Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Sun, 16 Mar 2025 22:00:55 +0100 Subject: [PATCH 13/26] Refactor remove unused code --- src/client/terrain/resources.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/client/terrain/resources.rs b/src/client/terrain/resources.rs index f82d96a6..988be567 100644 --- a/src/client/terrain/resources.rs +++ b/src/client/terrain/resources.rs @@ -28,12 +28,6 @@ pub struct MesherTasks { pub task_list: Vec, } -impl Default for MesherTasks { - fn default() -> Self { - Self::new() - } -} - impl MesherTasks { pub fn new() -> Self { MesherTasks { From 6c40e670e846c1f5e202c24b51e9a07bb50055d7 Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Sun, 16 Mar 2025 22:06:03 +0100 Subject: [PATCH 14/26] Refactor --- src/client/terrain/systems.rs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index eb4f7182..67f40600 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -117,10 +117,7 @@ fn create_cube_mesher_task( let chunk = *chunk; let texture_manager = texture_manager.clone(); - let task = - task_pool.spawn(async move { terrain_util::create_chunk_mesh(&chunk, &texture_manager) }); - - MeshTask(task) + MeshTask(task_pool.spawn(async move { terrain_util::create_chunk_mesh(&chunk, &texture_manager) })) } fn create_cross_mesher_task( @@ -132,10 +129,8 @@ fn create_cross_mesher_task( let chunk = *chunk; let texture_manager = texture_manager.clone(); - let task = task_pool - .spawn(async move { terrain_util::create_cross_mesh_for_chunk(&chunk, &texture_manager) }); - - MeshTask(task) + MeshTask(task_pool + .spawn(async move { terrain_util::create_cross_mesh_for_chunk(&chunk, &texture_manager) })) } pub fn handle_chunk_tasks_system( From 09af598f75c63ef1548fd10f440255bb8c6234c2 Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Sun, 16 Mar 2025 22:06:48 +0100 Subject: [PATCH 15/26] Refactor rename --- src/client/terrain/systems.rs | 5 ++--- src/client/terrain/util/cube_mesher.rs | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index 67f40600..bbcd13a7 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -117,7 +117,7 @@ fn create_cube_mesher_task( let chunk = *chunk; let texture_manager = texture_manager.clone(); - MeshTask(task_pool.spawn(async move { terrain_util::create_chunk_mesh(&chunk, &texture_manager) })) + MeshTask(task_pool.spawn(async move { terrain_util::create_cube_mesh_for_chunk(&chunk, &texture_manager) })) } fn create_cross_mesher_task( @@ -129,8 +129,7 @@ fn create_cross_mesher_task( let chunk = *chunk; let texture_manager = texture_manager.clone(); - MeshTask(task_pool - .spawn(async move { terrain_util::create_cross_mesh_for_chunk(&chunk, &texture_manager) })) + MeshTask(task_pool .spawn(async move { terrain_util::create_cross_mesh_for_chunk(&chunk, &texture_manager) })) } pub fn handle_chunk_tasks_system( diff --git a/src/client/terrain/util/cube_mesher.rs b/src/client/terrain/util/cube_mesher.rs index 45462e5c..0937f6df 100644 --- a/src/client/terrain/util/cube_mesher.rs +++ b/src/client/terrain/util/cube_mesher.rs @@ -55,7 +55,7 @@ pub fn create_cube_geometry_data( } } -pub fn create_chunk_mesh(chunk: &Chunk, texture_manager: &TextureManager) -> Option { +pub fn create_cube_mesh_for_chunk(chunk: &Chunk, texture_manager: &TextureManager) -> Option { let mut geometry_data = GeometryData { position: Vec::new(), uv: Vec::new(), From ea89014325391886a95dfb8a8fdc34e970c81deb Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Sun, 16 Mar 2025 22:08:18 +0100 Subject: [PATCH 16/26] Use ChatGPT to DRYify mesher task with macro --- src/client/terrain/systems.rs | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index bbcd13a7..ffe56a0a 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -108,29 +108,20 @@ pub fn handle_chunk_mesh_update_events_system( } } -fn create_cube_mesher_task( - chunk: &Chunk, - texture_manager: &terrain_util::TextureManager, -) -> MeshTask { - let task_pool = AsyncComputeTaskPool::get(); - - let chunk = *chunk; - let texture_manager = texture_manager.clone(); - - MeshTask(task_pool.spawn(async move { terrain_util::create_cube_mesh_for_chunk(&chunk, &texture_manager) })) +macro_rules! create_mesher_task { + ($fn_name:ident, $mesher_fn:expr) => { + fn $fn_name(chunk: &Chunk, texture_manager: &terrain_util::TextureManager) -> MeshTask { + let task_pool = AsyncComputeTaskPool::get(); + let chunk = *chunk; + let texture_manager = texture_manager.clone(); + + MeshTask(task_pool.spawn(async move { $mesher_fn(&chunk, &texture_manager) })) + } + }; } -fn create_cross_mesher_task( - chunk: &Chunk, - texture_manager: &terrain_util::TextureManager, -) -> MeshTask { - let task_pool = AsyncComputeTaskPool::get(); - - let chunk = *chunk; - let texture_manager = texture_manager.clone(); - - MeshTask(task_pool .spawn(async move { terrain_util::create_cross_mesh_for_chunk(&chunk, &texture_manager) })) -} +create_mesher_task!(create_cube_mesher_task, terrain_util::create_cube_mesh_for_chunk); +create_mesher_task!(create_cross_mesher_task, terrain_util::create_cross_mesh_for_chunk); pub fn handle_chunk_tasks_system( mut commands: Commands, From 83ddaa3020c3976cf9b312f0ebf6caa9ffdb4dc8 Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Sun, 16 Mar 2025 22:09:54 +0100 Subject: [PATCH 17/26] Refactor, fix linter --- src/client/terrain/mod.rs | 2 +- src/client/terrain/resources.rs | 10 +--------- src/client/terrain/systems.rs | 10 ++++++++-- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/client/terrain/mod.rs b/src/client/terrain/mod.rs index 8c39075d..4bb9eb04 100644 --- a/src/client/terrain/mod.rs +++ b/src/client/terrain/mod.rs @@ -14,7 +14,7 @@ impl Plugin for TerrainPlugin { app.insert_resource(ChunkManager::new()); app.insert_resource(util::TextureManager::new()); app.insert_resource(resources::RenderMaterials::new()); - app.insert_resource(resources::MesherTasks::new()); + app.insert_resource(resources::MesherTasks::default()); app.add_event::(); app.add_event::(); app.add_event::(); diff --git a/src/client/terrain/resources.rs b/src/client/terrain/resources.rs index 988be567..ffaf0ad5 100644 --- a/src/client/terrain/resources.rs +++ b/src/client/terrain/resources.rs @@ -23,19 +23,11 @@ pub struct FutureChunkMesh { pub mesh_type: MeshType, } -#[derive(Resource)] +#[derive(Resource, Default)] pub struct MesherTasks { pub task_list: Vec, } -impl MesherTasks { - pub fn new() -> Self { - MesherTasks { - task_list: Vec::new(), - } - } -} - #[derive(Resource)] pub struct RenderMaterials { pub transparent_material: Option>, diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index ffe56a0a..f4a1e531 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -120,8 +120,14 @@ macro_rules! create_mesher_task { }; } -create_mesher_task!(create_cube_mesher_task, terrain_util::create_cube_mesh_for_chunk); -create_mesher_task!(create_cross_mesher_task, terrain_util::create_cross_mesh_for_chunk); +create_mesher_task!( + create_cube_mesher_task, + terrain_util::create_cube_mesh_for_chunk +); +create_mesher_task!( + create_cross_mesher_task, + terrain_util::create_cross_mesh_for_chunk +); pub fn handle_chunk_tasks_system( mut commands: Commands, From 32806937c839cfc029de9c802ae5eea4e24505f6 Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Sun, 16 Mar 2025 22:16:57 +0100 Subject: [PATCH 18/26] Refactor --- src/client/terrain/systems.rs | 54 ++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index f4a1e531..d4f264f7 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -156,27 +156,41 @@ pub fn handle_chunk_tasks_system( let mesh = mesh_option.expect("Mesh exists"); let mesh_handle = meshes.add(mesh); - let material_handle = match future_chunk.mesh_type { - MeshType::Solid => materials.chunk_material.clone(), - MeshType::Transparent => materials.transparent_material.clone(), + let entity = commands + .spawn(( + Mesh3d(mesh_handle), + Transform::from_xyz( + chunk_position.x * CHUNK_SIZE as f32, + chunk_position.y * CHUNK_SIZE as f32, + chunk_position.z * CHUNK_SIZE as f32, + ), + terrain_components::ChunkMesh { + key: [ + chunk_position.x as i32, + chunk_position.y as i32, + chunk_position.z as i32, + ], + }, + )) + .id(); + + match future_chunk.mesh_type { + MeshType::Solid => commands.entity(entity).insert(( + MeshMaterial3d( + materials + .chunk_material + .clone() + .expect("Solid material exists"), + ), + player_components::Raycastable, + )), + MeshType::Transparent => commands.entity(entity).insert(MeshMaterial3d( + materials + .transparent_material + .clone() + .expect("Solid material exists"), + )), }; - - commands.spawn(( - Mesh3d(mesh_handle), - MeshMaterial3d(material_handle.expect("Material exists")), - Transform::from_xyz( - chunk_position.x * CHUNK_SIZE as f32, - chunk_position.y * CHUNK_SIZE as f32, - chunk_position.z * CHUNK_SIZE as f32, - ), - terrain_components::ChunkMesh { - key: [ - chunk_position.x as i32, - chunk_position.y as i32, - chunk_position.z as i32, - ], - }, - )); }); let mut index = 0; From 8c8730457171677bc62530df9152ec322df194a0 Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Sun, 16 Mar 2025 22:25:47 +0100 Subject: [PATCH 19/26] Improve dispose --- src/client/terrain/components.rs | 3 +++ src/client/terrain/resources.rs | 1 + src/client/terrain/systems.rs | 18 +++++++++++------- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/client/terrain/components.rs b/src/client/terrain/components.rs index 69b7183d..05c7824e 100644 --- a/src/client/terrain/components.rs +++ b/src/client/terrain/components.rs @@ -1,6 +1,9 @@ use bevy::ecs::component::Component; +use super::resources::MeshType; + #[derive(Component)] pub struct ChunkMesh { pub key: [i32; 3], + pub mesh_type: MeshType, } diff --git a/src/client/terrain/resources.rs b/src/client/terrain/resources.rs index ffaf0ad5..623a0a27 100644 --- a/src/client/terrain/resources.rs +++ b/src/client/terrain/resources.rs @@ -11,6 +11,7 @@ impl SpawnAreaLoaded { } } +#[derive(Clone, PartialEq)] pub enum MeshType { Solid, Transparent, diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index d4f264f7..71a72c00 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -70,10 +70,8 @@ pub fn generate_world_system( } pub fn handle_chunk_mesh_update_events_system( - mut commands: Commands, chunk_manager: ResMut, mut chunk_mesh_update_events: EventReader, - mut mesh_query: Query<(Entity, &terrain_components::ChunkMesh)>, texture_manager: ResMut, mut tasks: ResMut, ) { @@ -85,11 +83,6 @@ pub fn handle_chunk_mesh_update_events_system( let chunk_option = chunk_manager.get_chunk(event.position); match chunk_option { Some(chunk) => { - for (entity, chunk_mesh) in mesh_query.iter_mut() { - if Chunk::key_eq_pos(chunk_mesh.key, chunk.position) { - commands.entity(entity).despawn(); - } - } tasks.task_list.push(FutureChunkMesh { position: chunk.position, mesh_task: create_cube_mesher_task(chunk, &texture_manager), @@ -134,6 +127,7 @@ pub fn handle_chunk_tasks_system( materials: Res, mut tasks: ResMut, mut meshes: ResMut>, + mut mesh_query: Query<(Entity, &terrain_components::ChunkMesh)>, ) { let mut next_poll_indicies: Vec = Vec::new(); tasks @@ -141,6 +135,7 @@ pub fn handle_chunk_tasks_system( .iter_mut() .enumerate() .for_each(|(index, future_chunk)| { + let mesh_type = future_chunk.mesh_type.clone(); let chunk_position = future_chunk.position; let task_result = bevy::tasks::block_on(future::poll_once(&mut future_chunk.mesh_task.0)); @@ -156,6 +151,14 @@ pub fn handle_chunk_tasks_system( let mesh = mesh_option.expect("Mesh exists"); let mesh_handle = meshes.add(mesh); + for (old_chunk, old_mesh) in mesh_query.iter_mut() { + if Chunk::key_eq_pos(old_mesh.key, chunk_position) + && old_mesh.mesh_type == mesh_type + { + commands.entity(old_chunk).despawn(); + } + } + let entity = commands .spawn(( Mesh3d(mesh_handle), @@ -170,6 +173,7 @@ pub fn handle_chunk_tasks_system( chunk_position.y as i32, chunk_position.z as i32, ], + mesh_type, }, )) .id(); From 5adc6544b572cc2df089b9db71d970253505d42a Mon Sep 17 00:00:00 2001 From: Daniel Bengl <53896675+CuddlyBunion341@users.noreply.github.com> Date: Sun, 16 Mar 2025 22:26:34 +0100 Subject: [PATCH 20/26] Update src/client/terrain/systems.rs --- src/client/terrain/systems.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index 71a72c00..3b2d8f8b 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -140,7 +140,6 @@ pub fn handle_chunk_tasks_system( let task_result = bevy::tasks::block_on(future::poll_once(&mut future_chunk.mesh_task.0)); if task_result.is_none() { - // Check next poll next_poll_indicies.push(index); return; } From 9541f0a70b052aab40d4beae74ded02e3a704714 Mon Sep 17 00:00:00 2001 From: Daniel Bengl <53896675+CuddlyBunion341@users.noreply.github.com> Date: Sun, 16 Mar 2025 22:30:22 +0100 Subject: [PATCH 21/26] Update src/client/terrain/systems.rs --- src/client/terrain/systems.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index 3b2d8f8b..a404192d 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -46,7 +46,7 @@ pub fn generate_world_system( mut client: ResMut, mut chunk_manager: ResMut, ) { - let render_distance = Vec3::new(8.0, 4.0, 8.0); + let render_distance = Vec3::new(4.0, 4.0, 4.0); info!("Sending chunk requests for chunks"); From 2940e1dd02674f1c1faa5933e52d68266d1ee740 Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Mon, 17 Mar 2025 18:19:48 +0100 Subject: [PATCH 22/26] Join chunk meshing --- src/client/terrain/resources.rs | 10 ++- src/client/terrain/systems.rs | 111 ++++++++++++++++---------------- 2 files changed, 62 insertions(+), 59 deletions(-) diff --git a/src/client/terrain/resources.rs b/src/client/terrain/resources.rs index 623a0a27..146cf15d 100644 --- a/src/client/terrain/resources.rs +++ b/src/client/terrain/resources.rs @@ -17,11 +17,15 @@ pub enum MeshType { Transparent, } -pub struct MeshTask(pub Task>); +pub struct ChunkMeshes { + pub cube_mesh: Option, + pub cross_mesh: Option, +} + +pub struct MeshTask(pub Task); pub struct FutureChunkMesh { pub position: Vec3, - pub mesh_task: MeshTask, - pub mesh_type: MeshType, + pub meshes_task: MeshTask, } #[derive(Resource, Default)] diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index a404192d..b38c3dd7 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -1,5 +1,7 @@ use bevy::tasks::{futures_lite::future, AsyncComputeTaskPool}; -use terrain_resources::{FutureChunkMesh, MeshTask, MeshType, MesherTasks, RenderMaterials}; +use terrain_resources::{ + ChunkMeshes, FutureChunkMesh, MeshTask, MeshType, MesherTasks, RenderMaterials, +}; use crate::prelude::*; @@ -46,7 +48,7 @@ pub fn generate_world_system( mut client: ResMut, mut chunk_manager: ResMut, ) { - let render_distance = Vec3::new(4.0, 4.0, 4.0); + let render_distance = Vec3::new(8.0, 4.0, 8.0); info!("Sending chunk requests for chunks"); @@ -85,13 +87,7 @@ pub fn handle_chunk_mesh_update_events_system( Some(chunk) => { tasks.task_list.push(FutureChunkMesh { position: chunk.position, - mesh_task: create_cube_mesher_task(chunk, &texture_manager), - mesh_type: terrain_resources::MeshType::Solid, - }); - tasks.task_list.push(FutureChunkMesh { - position: chunk.position, - mesh_task: create_cross_mesher_task(chunk, &texture_manager), - mesh_type: terrain_resources::MeshType::Transparent, + meshes_task: create_mesher_task(chunk, &texture_manager), }); } None => { @@ -101,27 +97,18 @@ pub fn handle_chunk_mesh_update_events_system( } } -macro_rules! create_mesher_task { - ($fn_name:ident, $mesher_fn:expr) => { - fn $fn_name(chunk: &Chunk, texture_manager: &terrain_util::TextureManager) -> MeshTask { - let task_pool = AsyncComputeTaskPool::get(); - let chunk = *chunk; - let texture_manager = texture_manager.clone(); - - MeshTask(task_pool.spawn(async move { $mesher_fn(&chunk, &texture_manager) })) +fn create_mesher_task(chunk: &Chunk, texture_manager: &terrain_util::TextureManager) -> MeshTask { + let task_pool = AsyncComputeTaskPool::get(); + let chunk = *chunk; + let texture_manager = texture_manager.clone(); + MeshTask(task_pool.spawn(async move { + ChunkMeshes { + cube_mesh: (terrain_util::create_cube_mesh_for_chunk)(&chunk, &texture_manager), + cross_mesh: (terrain_util::create_cross_mesh_for_chunk)(&chunk, &texture_manager), } - }; + })) } -create_mesher_task!( - create_cube_mesher_task, - terrain_util::create_cube_mesh_for_chunk -); -create_mesher_task!( - create_cross_mesher_task, - terrain_util::create_cross_mesh_for_chunk -); - pub fn handle_chunk_tasks_system( mut commands: Commands, materials: Res, @@ -135,32 +122,27 @@ pub fn handle_chunk_tasks_system( .iter_mut() .enumerate() .for_each(|(index, future_chunk)| { - let mesh_type = future_chunk.mesh_type.clone(); let chunk_position = future_chunk.position; let task_result = - bevy::tasks::block_on(future::poll_once(&mut future_chunk.mesh_task.0)); + bevy::tasks::block_on(future::poll_once(&mut future_chunk.meshes_task.0)); if task_result.is_none() { next_poll_indicies.push(index); return; } let mesh_option = task_result.unwrap(); - if mesh_option.is_none() { - return; - } - let mesh = mesh_option.expect("Mesh exists"); - let mesh_handle = meshes.add(mesh); - for (old_chunk, old_mesh) in mesh_query.iter_mut() { - if Chunk::key_eq_pos(old_mesh.key, chunk_position) - && old_mesh.mesh_type == mesh_type - { - commands.entity(old_chunk).despawn(); - } - } + if mesh_option.cross_mesh.is_some() { + let mesh = mesh_option.cross_mesh.unwrap(); + let mesh_handle = meshes.add(mesh); - let entity = commands - .spawn(( + commands.spawn(( Mesh3d(mesh_handle), + MeshMaterial3d( + materials + .transparent_material + .clone() + .expect("Solid material exists"), + ), Transform::from_xyz( chunk_position.x * CHUNK_SIZE as f32, chunk_position.y * CHUNK_SIZE as f32, @@ -172,13 +154,30 @@ pub fn handle_chunk_tasks_system( chunk_position.y as i32, chunk_position.z as i32, ], - mesh_type, + mesh_type: MeshType::Transparent, }, - )) - .id(); + )); + } - match future_chunk.mesh_type { - MeshType::Solid => commands.entity(entity).insert(( + if mesh_option.cube_mesh.is_some() { + let mesh = mesh_option.cube_mesh.unwrap(); + let mesh_handle = meshes.add(mesh); + + commands.spawn(( + Mesh3d(mesh_handle), + Transform::from_xyz( + chunk_position.x * CHUNK_SIZE as f32, + chunk_position.y * CHUNK_SIZE as f32, + chunk_position.z * CHUNK_SIZE as f32, + ), + terrain_components::ChunkMesh { + key: [ + chunk_position.x as i32, + chunk_position.y as i32, + chunk_position.z as i32, + ], + mesh_type: MeshType::Transparent, + }, MeshMaterial3d( materials .chunk_material @@ -186,14 +185,14 @@ pub fn handle_chunk_tasks_system( .expect("Solid material exists"), ), player_components::Raycastable, - )), - MeshType::Transparent => commands.entity(entity).insert(MeshMaterial3d( - materials - .transparent_material - .clone() - .expect("Solid material exists"), - )), - }; + )); + } + + for (old_chunk, old_mesh) in mesh_query.iter_mut() { + if Chunk::key_eq_pos(old_mesh.key, chunk_position) { + commands.entity(old_chunk).despawn(); + } + } }); let mut index = 0; From 68ab49e0925285b3dc7665949037dcb035961555 Mon Sep 17 00:00:00 2001 From: Daniel Bengl Date: Mon, 17 Mar 2025 19:22:09 +0100 Subject: [PATCH 23/26] Refactor? --- src/client/terrain/systems.rs | 94 +++++++++++++++++------------------ 1 file changed, 46 insertions(+), 48 deletions(-) diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index b38c3dd7..e5732f66 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -1,4 +1,5 @@ use bevy::tasks::{futures_lite::future, AsyncComputeTaskPool}; +use terrain_components::ChunkMesh; use terrain_resources::{ ChunkMeshes, FutureChunkMesh, MeshTask, MeshType, MesherTasks, RenderMaterials, }; @@ -133,59 +134,26 @@ pub fn handle_chunk_tasks_system( if mesh_option.cross_mesh.is_some() { let mesh = mesh_option.cross_mesh.unwrap(); - let mesh_handle = meshes.add(mesh); - - commands.spawn(( - Mesh3d(mesh_handle), - MeshMaterial3d( - materials - .transparent_material - .clone() - .expect("Solid material exists"), - ), - Transform::from_xyz( - chunk_position.x * CHUNK_SIZE as f32, - chunk_position.y * CHUNK_SIZE as f32, - chunk_position.z * CHUNK_SIZE as f32, - ), - terrain_components::ChunkMesh { - key: [ - chunk_position.x as i32, - chunk_position.y as i32, - chunk_position.z as i32, - ], - mesh_type: MeshType::Transparent, - }, + commands.spawn(create_chunk_bundle( + meshes.add(mesh), + chunk_position, + MeshType::Transparent, + materials.transparent_material.clone().unwrap(), )); } if mesh_option.cube_mesh.is_some() { let mesh = mesh_option.cube_mesh.unwrap(); - let mesh_handle = meshes.add(mesh); - - commands.spawn(( - Mesh3d(mesh_handle), - Transform::from_xyz( - chunk_position.x * CHUNK_SIZE as f32, - chunk_position.y * CHUNK_SIZE as f32, - chunk_position.z * CHUNK_SIZE as f32, - ), - terrain_components::ChunkMesh { - key: [ - chunk_position.x as i32, - chunk_position.y as i32, - chunk_position.z as i32, - ], - mesh_type: MeshType::Transparent, - }, - MeshMaterial3d( - materials - .chunk_material - .clone() - .expect("Solid material exists"), - ), - player_components::Raycastable, - )); + let id = commands + .spawn(create_chunk_bundle( + meshes.add(mesh), + chunk_position, + MeshType::Solid, + materials.chunk_material.clone().unwrap(), + )) + .id(); + + commands.entity(id).insert(player_components::Raycastable); } for (old_chunk, old_mesh) in mesh_query.iter_mut() { @@ -203,6 +171,36 @@ pub fn handle_chunk_tasks_system( }) } +fn create_chunk_bundle( + mesh_handle: Handle, + chunk_position: Vec3, + mesh_type: MeshType, + material_handle: Handle, +) -> ( + bevy::prelude::Mesh3d, + bevy::prelude::Transform, + ChunkMesh, + bevy::prelude::MeshMaterial3d, +) { + ( + Mesh3d(mesh_handle), + Transform::from_xyz( + chunk_position.x * CHUNK_SIZE as f32, + chunk_position.y * CHUNK_SIZE as f32, + chunk_position.z * CHUNK_SIZE as f32, + ), + terrain_components::ChunkMesh { + key: [ + chunk_position.x as i32, + chunk_position.y as i32, + chunk_position.z as i32, + ], + mesh_type, + }, + MeshMaterial3d(material_handle), + ) +} + fn create_transparent_material(texture_handle: Handle) -> StandardMaterial { StandardMaterial { perceptual_roughness: 1.0, From 90e272bf3fb1d245ac0c2f1df35be2484a6ce44b Mon Sep 17 00:00:00 2001 From: CuddlyBunion341 Date: Tue, 18 Mar 2025 21:20:17 +0100 Subject: [PATCH 24/26] Refactor systems --- src/client/terrain/systems.rs | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index e5732f66..7b6900f4 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -124,8 +124,7 @@ pub fn handle_chunk_tasks_system( .enumerate() .for_each(|(index, future_chunk)| { let chunk_position = future_chunk.position; - let task_result = - bevy::tasks::block_on(future::poll_once(&mut future_chunk.meshes_task.0)); + let task_result = bevy::tasks::block_on(future::poll_once(&mut future_chunk.meshes_task.0)); if task_result.is_none() { next_poll_indicies.push(index); return; @@ -133,9 +132,8 @@ pub fn handle_chunk_tasks_system( let mesh_option = task_result.unwrap(); if mesh_option.cross_mesh.is_some() { - let mesh = mesh_option.cross_mesh.unwrap(); commands.spawn(create_chunk_bundle( - meshes.add(mesh), + meshes.add(mesh_option.cross_mesh.unwrap()), chunk_position, MeshType::Transparent, materials.transparent_material.clone().unwrap(), @@ -143,17 +141,14 @@ pub fn handle_chunk_tasks_system( } if mesh_option.cube_mesh.is_some() { - let mesh = mesh_option.cube_mesh.unwrap(); - let id = commands + commands .spawn(create_chunk_bundle( - meshes.add(mesh), + meshes.add(mesh_option.cube_mesh.unwrap()), chunk_position, MeshType::Solid, materials.chunk_material.clone().unwrap(), )) - .id(); - - commands.entity(id).insert(player_components::Raycastable); + .insert(player_components::Raycastable); } for (old_chunk, old_mesh) in mesh_query.iter_mut() { From f9e5cbd89ba6b96fc508647d4f08956a77d3a8f0 Mon Sep 17 00:00:00 2001 From: CuddlyBunion341 Date: Tue, 18 Mar 2025 21:20:27 +0100 Subject: [PATCH 25/26] Fix linter --- src/client/terrain/systems.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index 7b6900f4..40f83f72 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -124,7 +124,8 @@ pub fn handle_chunk_tasks_system( .enumerate() .for_each(|(index, future_chunk)| { let chunk_position = future_chunk.position; - let task_result = bevy::tasks::block_on(future::poll_once(&mut future_chunk.meshes_task.0)); + let task_result = + bevy::tasks::block_on(future::poll_once(&mut future_chunk.meshes_task.0)); if task_result.is_none() { next_poll_indicies.push(index); return; From 7085d21c83f97207b1901a813626b4b995760392 Mon Sep 17 00:00:00 2001 From: CuddlyBunion341 Date: Tue, 18 Mar 2025 21:22:01 +0100 Subject: [PATCH 26/26] Refactor rename --- src/client/terrain/systems.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/client/terrain/systems.rs b/src/client/terrain/systems.rs index 40f83f72..89427b04 100644 --- a/src/client/terrain/systems.rs +++ b/src/client/terrain/systems.rs @@ -88,7 +88,7 @@ pub fn handle_chunk_mesh_update_events_system( Some(chunk) => { tasks.task_list.push(FutureChunkMesh { position: chunk.position, - meshes_task: create_mesher_task(chunk, &texture_manager), + meshes_task: create_mesh_task(chunk, &texture_manager), }); } None => { @@ -98,14 +98,14 @@ pub fn handle_chunk_mesh_update_events_system( } } -fn create_mesher_task(chunk: &Chunk, texture_manager: &terrain_util::TextureManager) -> MeshTask { +fn create_mesh_task(chunk: &Chunk, texture_manager: &terrain_util::TextureManager) -> MeshTask { let task_pool = AsyncComputeTaskPool::get(); let chunk = *chunk; let texture_manager = texture_manager.clone(); MeshTask(task_pool.spawn(async move { ChunkMeshes { - cube_mesh: (terrain_util::create_cube_mesh_for_chunk)(&chunk, &texture_manager), - cross_mesh: (terrain_util::create_cross_mesh_for_chunk)(&chunk, &texture_manager), + cube_mesh: terrain_util::create_cube_mesh_for_chunk(&chunk, &texture_manager), + cross_mesh: terrain_util::create_cross_mesh_for_chunk(&chunk, &texture_manager), } })) }