This commit is contained in:
2024-11-10 21:35:51 -05:00
parent 4271167752
commit ba7b3abc25
4 changed files with 31 additions and 32 deletions

View File

@@ -50,7 +50,7 @@ impl Plugin for MapInitPlugin {
app.add_plugins(( app.add_plugins((
ChunkRebuildPlugin, ChunkRebuildPlugin,
// TerraFormingTestPlugin, // TerraFormingTestPlugin,
MaterialPlugin::<ChunkMaterial>::default(), MaterialPlugin::<ExtendedMaterial<StandardMaterial, ChunkMaterial>>::default(),
MaterialPlugin::<ExtendedMaterial<StandardMaterial, WaterMaterial>> { MaterialPlugin::<ExtendedMaterial<StandardMaterial, WaterMaterial>> {
prepass_enabled: false, prepass_enabled: false,
..Default::default() ..Default::default()
@@ -123,7 +123,7 @@ fn finalize_biome_painter(
fn finalize_texture( fn finalize_texture(
mut atlas: ResMut<PhosAssets>, mut atlas: ResMut<PhosAssets>,
mut images: ResMut<Assets<Image>>, mut images: ResMut<Assets<Image>>,
mut chunk_materials: ResMut<Assets<ChunkMaterial>>, mut chunk_materials: ResMut<Assets<ExtendedMaterial<StandardMaterial, ChunkMaterial>>>,
mut next_load_state: ResMut<NextState<AssetLoadState>>, mut next_load_state: ResMut<NextState<AssetLoadState>>,
) { ) {
let image = images.get_mut(atlas.handle.id()).unwrap(); let image = images.get_mut(atlas.handle.id()).unwrap();
@@ -131,8 +131,11 @@ fn finalize_texture(
let array_layers = image.height() / image.width(); let array_layers = image.height() / image.width();
image.reinterpret_stacked_2d_as_array(array_layers); image.reinterpret_stacked_2d_as_array(array_layers);
let chunk_material = chunk_materials.add(ChunkMaterial { let chunk_material = chunk_materials.add(ExtendedMaterial {
array_texture: atlas.handle.clone(), base: StandardMaterial::default(),
extension: ChunkMaterial {
array_texture: atlas.handle.clone(),
},
}); });
atlas.chunk_material_handle = chunk_material; atlas.chunk_material_handle = chunk_material;

View File

@@ -12,7 +12,7 @@ use crate::shader_extensions::water_material::WaterMaterial;
pub struct PhosAssets { pub struct PhosAssets {
#[asset(key = "chunk_atlas")] #[asset(key = "chunk_atlas")]
pub handle: Handle<Image>, pub handle: Handle<Image>,
pub chunk_material_handle: Handle<ChunkMaterial>, pub chunk_material_handle: Handle<ExtendedMaterial<StandardMaterial, ChunkMaterial>>,
pub water_material: Handle<ExtendedMaterial<StandardMaterial, WaterMaterial>>, pub water_material: Handle<ExtendedMaterial<StandardMaterial, WaterMaterial>>,
} }

View File

@@ -1,6 +1,5 @@
use bevy::asset::{Asset, Handle}; use bevy::asset::{Asset, Handle};
use bevy::pbr::{Material, MaterialExtension, OpaqueRendererMethod}; use bevy::pbr::{Material, MaterialExtension};
use bevy::prelude::Mesh;
use bevy::reflect::TypePath; use bevy::reflect::TypePath;
use bevy::render::mesh::{MeshVertexAttribute, MeshVertexBufferLayoutRef}; use bevy::render::mesh::{MeshVertexAttribute, MeshVertexBufferLayoutRef};
use bevy::render::render_resource::{AsBindGroup, ShaderRef}; use bevy::render::render_resource::{AsBindGroup, ShaderRef};
@@ -14,9 +13,22 @@ pub struct ChunkMaterial {
pub array_texture: Handle<Image>, pub array_texture: Handle<Image>,
} }
impl Material for ChunkMaterial { impl MaterialExtension for ChunkMaterial {
fn fragment_shader() -> ShaderRef { fn fragment_shader() -> ShaderRef {
"shaders/world/chunk_packed.wgsl".into() "shaders/world/chunk.wgsl".into()
}
}
#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]
pub struct PackedChunkMaterial {
#[texture(100, dimension = "2d_array")]
#[sampler(101)]
pub array_texture: Handle<Image>,
}
impl Material for PackedChunkMaterial {
fn fragment_shader() -> ShaderRef {
"shaders/world/chunk.wgsl".into()
} }
fn vertex_shader() -> ShaderRef { fn vertex_shader() -> ShaderRef {
@@ -27,13 +39,13 @@ impl Material for ChunkMaterial {
"shaders/world/chunk_packed.wgsl".into() "shaders/world/chunk_packed.wgsl".into()
} }
fn deferred_vertex_shader() -> ShaderRef { // fn deferred_vertex_shader() -> ShaderRef {
"shaders/world/chunk_packed.wgsl".into() // "shaders/world/chunk_packed.wgsl".into()
} // }
fn opaque_render_method(&self) -> bevy::pbr::OpaqueRendererMethod { // fn opaque_render_method(&self) -> bevy::pbr::OpaqueRendererMethod {
return OpaqueRendererMethod::Auto; // return OpaqueRendererMethod::Auto;
} // }
fn specialize( fn specialize(
_pipeline: &bevy::pbr::MaterialPipeline<Self>, _pipeline: &bevy::pbr::MaterialPipeline<Self>,
@@ -51,20 +63,4 @@ impl Material for ChunkMaterial {
descriptor.vertex.buffers = vec![vertex_layout]; descriptor.vertex.buffers = vec![vertex_layout];
Ok(()) Ok(())
} }
// fn specialize(
// descriptor: &mut bevy::render::render_resource::RenderPipelineDescriptor,
// layout: &MeshVertexBufferLayoutRef,
// _key: bevy::pbr::MaterialPipelineKey<Self>,
// ) -> Result<(), bevy::render::render_resource::SpecializedMeshPipelineError> {
// let vertex_layout = layout.0.get_layout(&[
// Mesh::ATTRIBUTE_POSITION.at_shader_location(0),
// Mesh::ATTRIBUTE_UV_0.at_shader_location(1),
// Mesh::ATTRIBUTE_NORMAL.at_shader_location(2),
// ATTRIBUTE_PACKED_VERTEX_DATA.at_shader_location(7),
// ATTRIBUTE_VERTEX_HEIGHT.at_shader_location(8),
// ])?;
// descriptor.vertex.buffers = vec![vertex_layout];
// Ok(())
// }
} }

View File

@@ -61,7 +61,7 @@ pub fn prepare_chunk_mesh(
) -> (Mesh, Mesh, (Vec<Vec3>, Vec<[u32; 3]>), Vec3, usize) { ) -> (Mesh, Mesh, (Vec<Vec3>, Vec<[u32; 3]>), Vec3, usize) {
#[cfg(feature = "tracing")] #[cfg(feature = "tracing")]
let _gen_mesh = info_span!("Generate Chunk").entered(); let _gen_mesh = info_span!("Generate Chunk").entered();
let chunk_mesh = generate_packed_chunk_mesh(chunk); let chunk_mesh = generate_chunk_mesh(chunk);
let water_mesh = generate_chunk_water_mesh(chunk, sealevel, map_size.x as usize, map_size.y as usize); let water_mesh = generate_chunk_water_mesh(chunk, sealevel, map_size.x as usize, map_size.y as usize);
let col_data = generate_chunk_collider(chunk); let col_data = generate_chunk_collider(chunk);