From 08fc32cdc6eff18ff2db6d9c30cfa9c1a91f2bee Mon Sep 17 00:00:00 2001 From: Aitor Moreno Date: Tue, 25 Mar 2025 16:39:45 +0100 Subject: [PATCH] :tada: Cache extra tiles --- render-wasm/src/render.rs | 17 +++++++---------- render-wasm/src/render/tiles.rs | 8 ++++++++ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/render-wasm/src/render.rs b/render-wasm/src/render.rs index ca0068177..0a1f77573 100644 --- a/render-wasm/src/render.rs +++ b/render-wasm/src/render.rs @@ -28,6 +28,8 @@ pub use blend::BlendMode; pub use fonts::*; pub use images::*; +// This is the extra are used for tile rendering. +const VIEWPORT_INTEREST_AREA_THRESHOLD: i32 = 1; const MAX_BLOCKING_TIME_MS: i32 = 32; const NODE_BATCH_THRESHOLD: i32 = 10; @@ -449,17 +451,12 @@ impl RenderState { }, ); - let (sx, sy, ex, ey) = tiles::get_tiles_for_viewbox(self.viewbox); + // TODO: Maybe we should calculate the interest area based on the actual viewport. See how. + let (sx, sy, ex, ey) = tiles::get_tiles_for_viewbox_with_interest( + self.viewbox, + VIEWPORT_INTEREST_AREA_THRESHOLD, + ); debug::render_debug_tiles_for_viewbox(self, sx, sy, ex, ey); - /* - // TODO: Instead of rendering only the visible area - // we could apply an offset to the viewbox to render - // more tiles. - sx - interest_delta - sy - interest_delta - ex + interest_delta - ey + interest_delta - */ let tile_center = ((ex - sx) / 2, (ey - sy) / 2); self.pending_tiles = vec![]; self.surfaces.cache_clear_visited(); diff --git a/render-wasm/src/render/tiles.rs b/render-wasm/src/render/tiles.rs index 0062e6ba3..4cf401045 100644 --- a/render-wasm/src/render/tiles.rs +++ b/render-wasm/src/render/tiles.rs @@ -33,6 +33,14 @@ pub fn get_tiles_for_viewbox(viewbox: Viewbox) -> (i32, i32, i32, i32) { get_tiles_for_rect(viewbox.area, tile_size) } +pub fn get_tiles_for_viewbox_with_interest( + viewbox: Viewbox, + interest: i32, +) -> (i32, i32, i32, i32) { + let (sx, sy, ex, ey) = get_tiles_for_viewbox(viewbox); + (sx - interest, sy - interest, ex + interest, ey + interest) +} + pub fn get_tile_pos(viewbox: Viewbox, (x, y): Tile) -> (f32, f32) { ( x as f32 * get_tile_size(viewbox),