maplibre/render/systems/
upload_system.rs

1//! Uploads data to the GPU which is needed for rendering.
2use crate::{
3    context::MapContext,
4    render::{
5        eventually::{Eventually, Eventually::Initialized},
6        tile_view_pattern::WgpuTileViewPattern,
7        Renderer,
8    },
9    tcs::system::{SystemError, SystemResult},
10};
11
12pub fn upload_system(
13    MapContext {
14        world,
15        view_state,
16        renderer: Renderer { queue, .. },
17        ..
18    }: &mut MapContext,
19) -> SystemResult {
20    let Some(Initialized(tile_view_pattern)) = world
21        .resources
22        .query_mut::<&mut Eventually<WgpuTileViewPattern>>()
23    else {
24        return Err(SystemError::Dependencies);
25    };
26
27    let view_proj = view_state.view_projection();
28    tile_view_pattern.upload_pattern(
29        queue,
30        &view_proj,
31        view_state.width() as f32,
32        view_state.height() as f32,
33    );
34
35    Ok(())
36}