From 7b46adf6e78c6638b69ebfbf2e133589b0d00067 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 5 Aug 2023 14:21:51 +0200 Subject: [PATCH] minedmap: split up big types by adding Boxes Make these values faster to move around, and optimize their size when used in Options. --- src/bin/minedmap/common.rs | 2 +- src/bin/minedmap/region_processor.rs | 4 ++-- src/bin/minedmap/tile_renderer.rs | 15 +++++++++------ 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/bin/minedmap/common.rs b/src/bin/minedmap/common.rs index eb1613e..44c7ae4 100644 --- a/src/bin/minedmap/common.rs +++ b/src/bin/minedmap/common.rs @@ -48,7 +48,7 @@ pub struct ProcessedChunk { #[derive(Debug, Clone, Default, Serialize, Deserialize)] pub struct ProcessedRegion { pub biome_list: IndexSet, - pub chunks: ChunkArray>, + pub chunks: ChunkArray>>, } pub struct Config { diff --git a/src/bin/minedmap/region_processor.rs b/src/bin/minedmap/region_processor.rs index 6600844..34c9555 100644 --- a/src/bin/minedmap/region_processor.rs +++ b/src/bin/minedmap/region_processor.rs @@ -125,11 +125,11 @@ impl<'a> RegionProcessor<'a> { else { return Ok(()); }; - processed_region.chunks[chunk_coords] = Some(ProcessedChunk { + processed_region.chunks[chunk_coords] = Some(Box::new(ProcessedChunk { blocks, biomes, depths, - }); + })); let chunk_lightmap = Self::render_chunk_lightmap(block_light); overlay_chunk(&mut lightmap, &chunk_lightmap, chunk_coords); diff --git a/src/bin/minedmap/tile_renderer.rs b/src/bin/minedmap/tile_renderer.rs index efede58..646e098 100644 --- a/src/bin/minedmap/tile_renderer.rs +++ b/src/bin/minedmap/tile_renderer.rs @@ -39,7 +39,7 @@ fn coord_offset( } fn biome_at( - region_group: &RegionGroup, + region_group: &RegionGroup>, chunk: ChunkCoords, block: LayerBlockCoords, dx: i32, @@ -72,18 +72,18 @@ impl<'a> TileRenderer<'a> { TileRenderer { config } } - fn load_region(processed_path: &Path) -> Result { + fn load_region(processed_path: &Path) -> Result> { storage::read(processed_path).context("Failed to load processed region data") } fn load_region_group( processed_paths: RegionGroup, - ) -> Result> { + ) -> Result>> { processed_paths.try_map(|path| Self::load_region(&path)) } fn block_color_at( - region_group: &RegionGroup, + region_group: &RegionGroup>, chunk: &ProcessedChunk, chunk_coords: ChunkCoords, block_coords: LayerBlockCoords, @@ -141,7 +141,7 @@ impl<'a> TileRenderer<'a> { fn render_chunk( image: &mut image::RgbaImage, - region_group: &RegionGroup, + region_group: &RegionGroup>, chunk: &ProcessedChunk, chunk_coords: ChunkCoords, ) { @@ -162,7 +162,10 @@ impl<'a> TileRenderer<'a> { overlay_chunk(image, &chunk_image, chunk_coords); } - fn render_region(image: &mut image::RgbaImage, region_group: &RegionGroup) { + fn render_region( + image: &mut image::RgbaImage, + region_group: &RegionGroup>, + ) { for (coords, chunk) in region_group.center().chunks.iter() { let Some(chunk) = chunk else { continue;