pack vertex data

This commit is contained in:
2024-04-27 20:45:11 -04:00
parent 4c8b52a3ff
commit 28047ebdb5
3 changed files with 151 additions and 3 deletions

View File

@@ -1,8 +1,10 @@
use bevy::asset::{Asset, Handle};
use bevy::pbr::MaterialExtension;
use bevy::reflect::TypePath;
use bevy::render::mesh::Mesh;
use bevy::render::render_resource::{AsBindGroup, ShaderRef};
use bevy::render::texture::Image;
use world_generation::prelude::ATTRIBUTE_PACKED_VERTEX_DATA;
#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]
pub struct ChunkMaterial {
@@ -15,4 +17,24 @@ impl MaterialExtension for ChunkMaterial {
fn fragment_shader() -> ShaderRef {
"shaders/world/chunk.wgsl".into()
}
fn vertex_shader() -> ShaderRef {
"shaders/world/chunk_packed.wgsl".into()
}
fn specialize(
_pipeline: &bevy::pbr::MaterialExtensionPipeline,
descriptor: &mut bevy::render::render_resource::RenderPipelineDescriptor,
layout: &bevy::render::mesh::MeshVertexBufferLayout,
_key: bevy::pbr::MaterialExtensionKey<Self>,
) -> Result<(), bevy::render::render_resource::SpecializedMeshPipelineError> {
let vertex_layout = layout.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),
])?;
descriptor.vertex.buffers = vec![vertex_layout];
Ok(())
}
}