Skip to main content

wde_terrain/render/dependencies/
mod.rs

1use bevy::prelude::*;
2use wde_renderer::prelude::*;
3
4use crate::render::dependencies::{
5    materials::TerrainMaterialsPlugin,
6    terrain_buffer::{
7        TerrainBuffer, TerrainBufferBinding, TerrainRenderSettings,
8        update_terrain_description_buffer, update_terrain_tiles_buffer
9    },
10    terrain_mesh::TerrainRenderPassMesh
11};
12
13pub mod materials;
14pub mod terrain_buffer;
15pub mod terrain_mesh;
16
17pub struct BuffersPlugin;
18impl Plugin for BuffersPlugin {
19    fn build(&self, app: &mut App) {
20        // Add the terrain mesh buffer
21        app.get_sub_app_mut(RenderApp)
22            .unwrap()
23            .add_systems(Extract, TerrainRenderPassMesh::extract_terrain_mesh);
24
25        // Init the terrain material arrays
26        app.init_resource::<TerrainRenderSettings>().add_plugins((
27            TerrainMaterialsPlugin,
28            ExtractResourcePlugin::<TerrainRenderSettings>::default(),
29            RenderDataRegisterPlugin::<TerrainBuffer>::default(),
30            RenderBindingRegisterPlugin::<TerrainBufferBinding>::default()
31        ));
32        app.get_sub_app_mut(RenderApp).unwrap().add_systems(
33            Render,
34            (
35                update_terrain_description_buffer,
36                update_terrain_tiles_buffer
37            )
38                .in_set(RenderSet::Prepare)
39        );
40
41        // Init the render pass meshes
42        app.init_resource::<TerrainRenderPassMesh>()
43            .add_systems(Startup, TerrainRenderPassMesh::init);
44        app.get_sub_app_mut(RenderApp)
45            .unwrap()
46            .init_resource::<TerrainRenderPassMesh>();
47    }
48}