wde_terrain/render/dependencies/
terrain_mesh.rs1use bevy::prelude::*;
2use wde_renderer::prelude::*;
3
4use crate::manager::{CHUNK_RENDER_SUBDIVISIONS, CHUNK_SIZE};
5
6#[derive(Resource, Default)]
7pub struct TerrainRenderPassMesh {
8 pub deferred_mesh: Option<Handle<Mesh>>
9}
10impl TerrainRenderPassMesh {
11 pub fn init(assets_server: Res<AssetServer>, mut render_pass: ResMut<TerrainRenderPassMesh>) {
13 let mut mesh = PlaneMesh::from("terrain_tile", CHUNK_RENDER_SUBDIVISIONS, Vec3::Y);
14
15 for vertex in &mut mesh.vertices {
17 vertex.position[0] *= CHUNK_SIZE;
18 vertex.position[2] *= CHUNK_SIZE;
19 }
20
21 for vertex in &mut mesh.vertices {
23 vertex.uv[0] = vertex.position[0] / CHUNK_SIZE + 0.5; vertex.uv[1] = vertex.position[2] / CHUNK_SIZE + 0.5; }
26
27 render_pass.deferred_mesh = Some(assets_server.add(mesh));
28 }
29
30 pub fn extract_terrain_mesh(
32 mesh_cpu: ExtractWorld<Res<TerrainRenderPassMesh>>,
33 mut mesh: ResMut<TerrainRenderPassMesh>
34 ) {
35 if mesh.deferred_mesh.is_some() {
37 return;
38 }
39
40 if let Some(ref mesh_cpu) = mesh_cpu.deferred_mesh {
42 mesh.deferred_mesh = Some(mesh_cpu.clone());
43 }
44 }
45}