wde_terrain/render/dependencies/
mod.rs

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