perf: eliminate HashMap lookups on z-scroll with fast recolor + targeted boundary dirty
Three optimizations for z-scroll performance: Option 1 — Fast in-place recolor (no HashMap lookups): - TilemapChunkStates stores solid_bits + underground_bits per chunk - recolor_chunk_for_depth iterates flat Vec<Option<TileData>> — pure cache-friendly sequential reads - tile_fade_color computes color from tileset_idx + z_diff without any HashMap access - vs repopulate_chunk_tiles: 32K Vec reads vs 32K HashMap lookups per frame Option 2 — Targeted boundary dirty (from 9×chunks to 2×chunks): - on_camera_z_changed now only marks the 4 boundary z-levels: old_entered, old_exited, new_entered, new_exited - Registry.z_change_keys tracks z-changed keys separately from occlusion dirty_keys - populate_tilemap_chunk_data uses fast recolor for z_change_keys, full repopulate for dirty_keys (occlusion — rare) Option 3 — Separate budgets: - z_change_keys processed with MAX_POPULATE_PER_FRAME budget (fast recolor) - dirty_keys processed with MAX_POPULATE_PER_FRAME budget (full repopulate) - Both pipelines tracked separately in benchmark Also: - populate_chunk_tiles now returns underground_bits for state storage - compute_solid_bits helper extracts solid tiles from TileData Vec - spawn_tilemap_chunks computes and stores both bitmasks on spawn - despawn_tilemap_chunks clears all state for despawned chunks
This commit is contained in:
+1
-1
@@ -1,4 +1,4 @@
|
||||
initial_chunk_radius = 5
|
||||
initial_chunk_radius = 15
|
||||
|
||||
[spawn_counts]
|
||||
dorfs = 5
|
||||
|
||||
Reference in New Issue
Block a user