From 722fe00d77763f0db99e5d566d61d7ed0c86becd Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Tue, 15 Aug 2023 18:45:38 +0200 Subject: [PATCH] minedmap: move inputs to processing steps from run() to new() --- src/bin/minedmap/main.rs | 6 +++--- src/bin/minedmap/metadata_writer.rs | 17 +++++++++-------- src/bin/minedmap/tile_mipmapper.rs | 9 +++++---- src/bin/minedmap/tile_renderer.rs | 12 +++++++++--- 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/bin/minedmap/main.rs b/src/bin/minedmap/main.rs index 05a0a38..ebeae87 100644 --- a/src/bin/minedmap/main.rs +++ b/src/bin/minedmap/main.rs @@ -48,9 +48,9 @@ fn main() -> Result<()> { .unwrap(); let regions = RegionProcessor::new(&config).run()?; - TileRenderer::new(&config, &rt).run(®ions)?; - let tiles = TileMipmapper::new(&config).run(®ions)?; - MetadataWriter::new(&config).run(tiles)?; + TileRenderer::new(&config, &rt, ®ions).run()?; + let tiles = TileMipmapper::new(&config, ®ions).run()?; + MetadataWriter::new(&config, &tiles).run()?; Ok(()) } diff --git a/src/bin/minedmap/metadata_writer.rs b/src/bin/minedmap/metadata_writer.rs index 437152a..3862362 100644 --- a/src/bin/minedmap/metadata_writer.rs +++ b/src/bin/minedmap/metadata_writer.rs @@ -4,10 +4,6 @@ use serde::Serialize; use super::common::*; -pub struct MetadataWriter<'a> { - config: &'a Config, -} - #[derive(Debug, Serialize)] #[serde(rename_all = "camelCase")] struct Bounds { @@ -35,9 +31,14 @@ struct Metadata<'t> { spawn: Spawn, } +pub struct MetadataWriter<'a> { + config: &'a Config, + tiles: &'a [TileCoordMap], +} + impl<'a> MetadataWriter<'a> { - pub fn new(config: &'a Config) -> Self { - MetadataWriter { config } + pub fn new(config: &'a Config, tiles: &'a [TileCoordMap]) -> Self { + MetadataWriter { config, tiles } } fn mipmap_entry(regions: &TileCoordMap) -> Mipmap { @@ -87,7 +88,7 @@ impl<'a> MetadataWriter<'a> { } } - pub fn run(&self, tiles: Vec) -> Result<()> { + pub fn run(self) -> Result<()> { let level_dat = self.read_level_dat()?; let mut metadata = Metadata { @@ -95,7 +96,7 @@ impl<'a> MetadataWriter<'a> { spawn: Self::spawn(&level_dat), }; - for tile_map in tiles.iter() { + for tile_map in self.tiles.iter() { metadata.mipmaps.push(Self::mipmap_entry(tile_map)); } diff --git a/src/bin/minedmap/tile_mipmapper.rs b/src/bin/minedmap/tile_mipmapper.rs index 2c1e9d6..4a8cf63 100644 --- a/src/bin/minedmap/tile_mipmapper.rs +++ b/src/bin/minedmap/tile_mipmapper.rs @@ -7,11 +7,12 @@ use super::common::*; pub struct TileMipmapper<'a> { config: &'a Config, + regions: &'a [TileCoords], } impl<'a> TileMipmapper<'a> { - pub fn new(config: &'a Config) -> Self { - TileMipmapper { config } + pub fn new(config: &'a Config, regions: &'a [TileCoords]) -> Self { + TileMipmapper { config, regions } } fn done(tiles: &TileCoordMap) -> bool { @@ -129,11 +130,11 @@ impl<'a> TileMipmapper<'a> { }) } - pub fn run(self, tiles: &[TileCoords]) -> Result> { + pub fn run(self) -> Result> { let mut tile_stack = { let mut tile_map = TileCoordMap::default(); - for &TileCoords { x, z } in tiles { + for &TileCoords { x, z } in self.regions { tile_map.0.entry(z).or_default().insert(x); } diff --git a/src/bin/minedmap/tile_renderer.rs b/src/bin/minedmap/tile_renderer.rs index a7c3121..048cf77 100644 --- a/src/bin/minedmap/tile_renderer.rs +++ b/src/bin/minedmap/tile_renderer.rs @@ -50,17 +50,23 @@ fn biome_at( pub struct TileRenderer<'a> { config: &'a Config, rt: &'a tokio::runtime::Runtime, + regions: &'a [TileCoords], region_cache: Mutex>>>, } impl<'a> TileRenderer<'a> { - pub fn new(config: &'a Config, rt: &'a tokio::runtime::Runtime) -> Self { + pub fn new( + config: &'a Config, + rt: &'a tokio::runtime::Runtime, + regions: &'a [TileCoords], + ) -> Self { let region_cache = Mutex::new(LruCache::new( NonZeroUsize::new(6 + 6 * config.num_threads).unwrap(), )); TileRenderer { config, rt, + regions, region_cache, } } @@ -261,11 +267,11 @@ impl<'a> TileRenderer<'a> { ) } - pub fn run(self, regions: &[TileCoords]) -> Result<()> { + pub fn run(self) -> Result<()> { fs::create_dir_all(&self.config.tile_dir(TileKind::Map, 0))?; // Use par_bridge to process items in order (for better use of region cache) - regions.iter().par_bridge().try_for_each(|&coords| { + self.regions.iter().par_bridge().try_for_each(|&coords| { self.render_tile(coords) .with_context(|| format!("Failed to render tile {:?}", coords)) })?;