Compute vertex_count for indexed meshes on GpuMesh (#8460)
# Objective Compute the `vertex_count` for indexed meshes as well as non-indexed meshes. I will need this in a future PR based on #8427 that adds a gizmo component that draws the normals of a mesh when attached to an entity ([branch](https://github.com/devil-ira/bevy/compare/instanced-line-rendering...devil-ira:bevy:instanced-line-rendering-normals)). <details><summary>Example image</summary> <p>  </p> </details> ## Solution Move `vertex_count` field from `GpuBufferInfo::NonIndexed` to `GpuMesh` ## Migration Guide `vertex_count` is now stored directly on `GpuMesh` instead of `GpuBufferInfo::NonIndexed`.
This commit is contained in:
parent
149c86b2ae
commit
6b774c0fda
@ -1177,8 +1177,8 @@ impl<P: PhaseItem> RenderCommand<P> for DrawMesh {
|
|||||||
pass.set_index_buffer(buffer.slice(..), 0, *index_format);
|
pass.set_index_buffer(buffer.slice(..), 0, *index_format);
|
||||||
pass.draw_indexed(0..*count, 0, 0..1);
|
pass.draw_indexed(0..*count, 0, 0..1);
|
||||||
}
|
}
|
||||||
GpuBufferInfo::NonIndexed { vertex_count } => {
|
GpuBufferInfo::NonIndexed => {
|
||||||
pass.draw(0..*vertex_count, 0..1);
|
pass.draw(0..gpu_mesh.vertex_count, 0..1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RenderCommandResult::Success
|
RenderCommandResult::Success
|
||||||
|
|||||||
@ -820,6 +820,7 @@ impl From<&Indices> for IndexFormat {
|
|||||||
pub struct GpuMesh {
|
pub struct GpuMesh {
|
||||||
/// Contains all attribute data for each vertex.
|
/// Contains all attribute data for each vertex.
|
||||||
pub vertex_buffer: Buffer,
|
pub vertex_buffer: Buffer,
|
||||||
|
pub vertex_count: u32,
|
||||||
pub buffer_info: GpuBufferInfo,
|
pub buffer_info: GpuBufferInfo,
|
||||||
pub primitive_topology: PrimitiveTopology,
|
pub primitive_topology: PrimitiveTopology,
|
||||||
pub layout: MeshVertexBufferLayout,
|
pub layout: MeshVertexBufferLayout,
|
||||||
@ -834,9 +835,7 @@ pub enum GpuBufferInfo {
|
|||||||
count: u32,
|
count: u32,
|
||||||
index_format: IndexFormat,
|
index_format: IndexFormat,
|
||||||
},
|
},
|
||||||
NonIndexed {
|
NonIndexed,
|
||||||
vertex_count: u32,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RenderAsset for Mesh {
|
impl RenderAsset for Mesh {
|
||||||
@ -861,11 +860,8 @@ impl RenderAsset for Mesh {
|
|||||||
contents: &vertex_buffer_data,
|
contents: &vertex_buffer_data,
|
||||||
});
|
});
|
||||||
|
|
||||||
let buffer_info = mesh.get_index_buffer_bytes().map_or(
|
let buffer_info = if let Some(data) = mesh.get_index_buffer_bytes() {
|
||||||
GpuBufferInfo::NonIndexed {
|
GpuBufferInfo::Indexed {
|
||||||
vertex_count: mesh.count_vertices() as u32,
|
|
||||||
},
|
|
||||||
|data| GpuBufferInfo::Indexed {
|
|
||||||
buffer: render_device.create_buffer_with_data(&BufferInitDescriptor {
|
buffer: render_device.create_buffer_with_data(&BufferInitDescriptor {
|
||||||
usage: BufferUsages::INDEX,
|
usage: BufferUsages::INDEX,
|
||||||
contents: data,
|
contents: data,
|
||||||
@ -873,13 +869,16 @@ impl RenderAsset for Mesh {
|
|||||||
}),
|
}),
|
||||||
count: mesh.indices().unwrap().len() as u32,
|
count: mesh.indices().unwrap().len() as u32,
|
||||||
index_format: mesh.indices().unwrap().into(),
|
index_format: mesh.indices().unwrap().into(),
|
||||||
},
|
}
|
||||||
);
|
} else {
|
||||||
|
GpuBufferInfo::NonIndexed
|
||||||
|
};
|
||||||
|
|
||||||
let mesh_vertex_buffer_layout = mesh.get_mesh_vertex_buffer_layout();
|
let mesh_vertex_buffer_layout = mesh.get_mesh_vertex_buffer_layout();
|
||||||
|
|
||||||
Ok(GpuMesh {
|
Ok(GpuMesh {
|
||||||
vertex_buffer,
|
vertex_buffer,
|
||||||
|
vertex_count: mesh.count_vertices() as u32,
|
||||||
buffer_info,
|
buffer_info,
|
||||||
primitive_topology: mesh.primitive_topology(),
|
primitive_topology: mesh.primitive_topology(),
|
||||||
layout: mesh_vertex_buffer_layout,
|
layout: mesh_vertex_buffer_layout,
|
||||||
|
|||||||
@ -599,8 +599,8 @@ impl<P: PhaseItem> RenderCommand<P> for DrawMesh2d {
|
|||||||
pass.set_index_buffer(buffer.slice(..), 0, *index_format);
|
pass.set_index_buffer(buffer.slice(..), 0, *index_format);
|
||||||
pass.draw_indexed(0..*count, 0, 0..1);
|
pass.draw_indexed(0..*count, 0, 0..1);
|
||||||
}
|
}
|
||||||
GpuBufferInfo::NonIndexed { vertex_count } => {
|
GpuBufferInfo::NonIndexed => {
|
||||||
pass.draw(0..*vertex_count, 0..1);
|
pass.draw(0..gpu_mesh.vertex_count, 0..1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RenderCommandResult::Success
|
RenderCommandResult::Success
|
||||||
|
|||||||
@ -253,8 +253,8 @@ impl<P: PhaseItem> RenderCommand<P> for DrawMeshInstanced {
|
|||||||
pass.set_index_buffer(buffer.slice(..), 0, *index_format);
|
pass.set_index_buffer(buffer.slice(..), 0, *index_format);
|
||||||
pass.draw_indexed(0..*count, 0, 0..instance_buffer.length as u32);
|
pass.draw_indexed(0..*count, 0, 0..instance_buffer.length as u32);
|
||||||
}
|
}
|
||||||
GpuBufferInfo::NonIndexed { vertex_count } => {
|
GpuBufferInfo::NonIndexed => {
|
||||||
pass.draw(0..*vertex_count, 0..instance_buffer.length as u32);
|
pass.draw(0..gpu_mesh.vertex_count, 0..instance_buffer.length as u32);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RenderCommandResult::Success
|
RenderCommandResult::Success
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user