33use std:: any:: Any ;
44use std:: sync:: Arc ;
55
6+ use galileo_types:: cartesian:: Vector2 ;
67use provider:: RasterTileProvider ;
78use web_time:: Duration ;
89
@@ -89,9 +90,12 @@ impl RasterTileLayer {
8990 } ;
9091
9192 let needed_indices: Vec < _ > = tile_iter. collect ( ) ;
93+ let mut to_pack: Vec < TileIndex > = needed_indices. iter ( ) . map ( |t| ( * t) . into ( ) ) . collect ( ) ;
94+ to_pack. dedup ( ) ;
95+
9296 self . tile_container
9397 . tile_provider
94- . pack_tiles ( & needed_indices , canvas) ;
98+ . pack_tiles ( & to_pack , canvas) ;
9599 let requires_redraw = self
96100 . tile_container
97101 . update_displayed_tiles ( needed_indices, ( ) ) ;
@@ -137,7 +141,13 @@ impl RasterTileLayer {
137141 for index in iter {
138142 let tile_provider = self . tile_loader . clone ( ) ;
139143 let messenger = self . messenger . clone ( ) ;
140- Self :: load_tile ( index, tile_provider, self . tile_container . clone ( ) , messenger) . await ;
144+ Self :: load_tile (
145+ index. into ( ) ,
146+ tile_provider,
147+ self . tile_container . clone ( ) ,
148+ messenger,
149+ )
150+ . await ;
141151 }
142152 }
143153 }
@@ -155,7 +165,11 @@ impl Layer for RasterTileLayer {
155165 let displayed_tiles = self . tile_container . tiles . lock ( ) ;
156166 let to_render: Vec < _ > = displayed_tiles
157167 . iter ( )
158- . map ( |v| BundleToDraw :: with_opacity ( & * v. bundle , v. opacity ) )
168+ . filter_map ( |v| {
169+ let tile_bbox = self . tile_schema . tile_bbox ( v. index ) ?;
170+ let offset = Vector2 :: new ( tile_bbox. x_min ( ) as f32 , tile_bbox. y_max ( ) as f32 ) ;
171+ Some ( BundleToDraw :: new ( & * v. bundle , v. opacity , offset) )
172+ } )
159173 . collect ( ) ;
160174
161175 canvas. draw_bundles ( & to_render, RenderOptions :: default ( ) ) ;
@@ -168,7 +182,7 @@ impl Layer for RasterTileLayer {
168182 let container = self . tile_container . clone ( ) ;
169183 let messenger = self . messenger . clone ( ) ;
170184 crate :: async_runtime:: spawn ( async move {
171- Self :: load_tile ( index, tile_provider, container, messenger) . await ;
185+ Self :: load_tile ( index. into ( ) , tile_provider, container, messenger) . await ;
172186 } ) ;
173187 }
174188 }
0 commit comments