All notable changes to bedrock-render are tracked here.
- Updated the
bedrock-worlddependency to0.3.3after fixing its blocked publish workflow.
- Updated the
bedrock-worlddependency to0.3.2after the0.3.1release workflow was blocked before publication.
- Updated
bedrock-leveldbandbedrock-worlddependencies to0.3.1after the0.3.0release workflow was blocked before publication.
- Added cache and validation benchmarks covering authority-index lookup, payload verification, refresh writes, and parallel chunk fingerprint checks.
- Extended the authoritative tile cache with reusable payload readers, XXH3-128 payload fingerprints, durable delta updates, and parallel dependency validation for interactive refreshes.
- Updated interactive scheduling benchmarks and cache-performance guidance.
- Updated
bedrock-leveldbandbedrock-worlddependencies to0.3.0.
- Added an authoritative final-tile cache index/blob alongside the manifest probe cache. Session rendering can now validate tile dependencies by world signature, chunk state, and tile-to-chunk references before trusting cached decoded output.
- Added decoded v2 streaming APIs through
TileStreamEventV2,DecodedTileImage,RenderTileOutputOptions, andTilePixelFormat, with RGBA8 output by default and BGRA8 available for UI toolkits that prefer it. - Added tile index cache diagnostics to
RenderPipelineStatsfor trusted hits, validated hits, misses, empty hits, and index read time.
- Prepared the crate for crates.io publishing by removing
publish = falseand declaring versionedbedrock-leveldb 0.2.2andbedrock-world 0.2.2dependencies while retaining local repository paths for development. - Bumped
RENDERER_CACHE_VERSIONto51; cached tiles from older cache layouts or pre-authority validation are invalidated. - Clarified the
editormodule as a downstream adapter over the corebedrock-worldwrite APIs. - Kept GPU backends opt-in. The default crate features are
asyncandwebp;gpu,gpu-dx11,gpu-vulkan, andgpu-dx12remain explicit feature choices.
TileImage::rgbais now shared asArc<[u8]>so streaming sessions and cache readers can pass decoded pixels without extra copies.PlannedTile::chunk_positionsis optional, allowing render-index planning to defer or reuse chunk dependency sets.- Existing renderer tile caches must be rebuilt because renderer cache version
51uses the authority index/blob layout.
- Added
bedrock_render::editor, a v0.2.0 writable facade overbedrock-worldmap/global/HSA/actor/block-entity/heightmap/biome APIs.MapWorldEditorkeeps normal render sources read-only and returnsMapEditInvalidationso UI integrations can refresh metadata, overlays, affected chunks, and tile caches after writes. - Added
MapRenderSessionandMapRenderSessionConfigfor long-lived interactive renderers that reuse the world handle, renderer, tile cache, and diagnostics state. - Added cancellable streaming tile rendering through
render_web_tiles_streaming_blockingand the asyncrender_web_tiles_streamingwrapper. - Added
TileStreamEventwith cached, rendered, failed, progress, and complete events so frontends can paint visible tiles before a full batch finishes. - Added render-index culling for missing chunks before baking, backed by
bedrock-worldkey-only region scans. - Added
logfacade diagnostics around session streaming, cache hits/misses, GPU backend selection, and CPU fallback. - Added
BlockBoundaryRenderOptionsfor default 2D per-block surface outlines and height-contact shadows inSurfaceBlocks. - Added
RenderGpuOptionsand GPU scheduling stats for bounded in-flight GPU compose, queue wait timing, batch counts, and readback worker visibility. - Added
RenderCpuPipelineOptionsandRenderTilePriorityonRenderOptionsfor bounded Rayon load/bake/compose scheduling and viewport-center-first tile ordering. - Added
render_web_tiles_streaming_channel, an async channel API returningtokio::sync::mpsc::Receiver<TileStreamEvent>. - Extended GPU scheduling with
batch_pixels,submit_workers,buffer_pool_bytes, andstaging_pool_bytes, plus buffer/staging pool reuse stats. - Changed interactive streaming to render multiple cache misses per group by default and split the worker budget between region workers and bedrock-world decode workers, so GPU batches are fed by more than one tile/region when resources allow.
- Extended
RenderPipelineStatsand logs with world load, DB read, decode, region copy, GPU prepare, upload, dispatch, and readback timings plus peak world worker counts. - Added rendering support for
bedrock-worldlegacy terrain chunks:SurfaceBlocks,HeightMap,LayerBlocks, andCaveSlicenow sampleLegacyTerrain(0x30) data and map common 0.16 numeric block IDs to modernminecraft:*names. - Added structured legacy biome rendering for old worlds. Real
LegacyTerrainbiome samples are decoded as[biome_id, red, green, blue];Biomeuses the saved RGB and prefers it over conflicting old Data2D/Data3D biome ids,RawBiomeLayeruses known saved IDs and falls back to saved RGB, andSurfaceBlocksuses the RGB for grass/foliage tint while keeping water on the existing water-tint path. - Fixed mixed old/new chunks so subchunk block data wins over fallback
LegacyTerrain, preventing grass surfaces from rendering as lower stone. - Added coordinate-signature regression coverage for direct tile, shared bake, region/web tile, and streaming-session paths, including negative chunk coordinates, one-region-per-chunk composition, and top-layer surface blocks above misleading raw heightmaps.
- Added region/tile placement diagnostics to
RenderPipelineStats:region_chunks_copied,region_chunks_out_of_bounds, andtile_missing_region_samples. - Added
RenderMode::RawHeightMapas the raw Data2D/Data3D/Legacy heightmap diagnostic mode. SurfaceBlocksand defaultHeightMapnow use the same canonical visual terrain column samples frombedrock-world. The renderer no longer performs its own top-down surface scan, so roofs/leaves above stale raw heightmaps, thin overlays, water relief, and block-entity surface colors share one source of truth.- Updated preview/static web-map/streaming examples to use
BedrockWorld::open_blocking, enabling automatic old LevelDB andchunks.datdetection.
- Interactive integrations should migrate from one-shot
render_web_tiles_blockingcalls to a reusableMapRenderSession. The old blocking batch API remains for export tools, but it no longer represents the recommended UI path. SurfaceRenderOptionsnow includesblock_boundaries, andRenderOptionsnow includesgpu,cpu, andpriority. Struct literals must add these fields or use..Default::default().- Renderer and GPU shader cache versions were bumped because default
SurfaceBlocksoutput now includes block-boundary shadowing, legacy terrain/biome sampling changed, and renderer cache version48invalidates tiles produced before the region/chunk coordinate and computed-height contracts were hardened. Existing cached tiles from older legacy sampling, misplaced region compose, or raw-height-driven surface rendering are invalid. RenderMode::HeightMapnow means computed surface height. UseRenderMode::RawHeightMapto preserve the old raw heightmap diagnostic behavior.- Renderer cache version is now
48; cached tiles from raw-height-driven surface rendering, older legacy biome priority, earlier coordinate/height fixes, or renderer-side surface rescanning are invalid. RenderOptions::default().cache_policyis nowBypass. SetRenderCachePolicy::Useexplicitly for sessions or exports that should read/write tile cache entries.
- Replace per-batch world/cache construction with one session per opened world.
- Stream
TileStreamEventvalues into the UI and discard stale events by generation when the world, dimension, mode, layout, or cache policy changes. - Use
RenderCancelFlagon every viewport batch and cancel the previous flag before scheduling a new visible-tile request. - Use
RenderOptions::gputo tune GPU compose. The default zero values select profile-aware in-flight, batch, readback, submit-worker, and buffer-pool settings. - Use
RenderOptions::priority = RenderTilePriority::DistanceFrom { .. }for interactive first-screen rendering; keepRowMajorfor deterministic export order. - Use
bedrock_render::editor::MapWorldEditorfor common write-mode map tooling. After a successful edit, applyMapEditInvalidationbefore rescheduling render work. - For 0.16-era worlds, open with
bedrock_world::BedrockWorld::openoropen_blockingso format detection can identifyLevelDbLegacyTerrainor read-onlyPocketChunksDat. - If an integration compared
HeightMapoutput against Data2D/Data3D bytes, migrate that check toRawHeightMap. UseHeightMapfor “what the rendered terrain surface height is,” not “what the world saved as a height hint.”
- Initial public crate-ready tile renderer for Minecraft Bedrock worlds.
- Surface, height map, biome, raw biome, fixed layer, and cave slice render modes.
- Embedded Bedrock block and biome color palette JSON sources, including grass, foliage, and water tint tables.
- Palette source schema metadata, source-policy documentation, JSON-only palette
rebuild support, and a
palette_toolexample for audit/normalize checks. - Clean-room block and biome palette generation, tainted-source audit checks, and
optional local resource-pack palette derivation under
target/. - Semantic palette guardrails for bamboo, dirt/grass paths, tint masks, biome grass separation, and real surface-render biome tint output.
- Region planning, deterministic tile paths, render diagnostics, cancellation, progress callbacks, bounded threading, memory-budgeted region baking, and optional GPU terrain-light compose.
- PNG/WebP/RGBA output support, preview and static web-map examples, fixture tests, Criterion benches, and English/Simplified Chinese documentation.
- The crate depends on
bedrock-worldby pinned Git revision until the Bedrock crate family is ready for crates.io publishing. - Real Bedrock worlds and generated render outputs are intentionally excluded from version control.