diff --git a/crates/bevy_render/src/draw.rs b/crates/bevy_render/src/draw.rs index 0da2b9e67cab08..b4c1450ccee0e6 100644 --- a/crates/bevy_render/src/draw.rs +++ b/crates/bevy_render/src/draw.rs @@ -115,6 +115,13 @@ impl Draw { }); } + pub fn draw(&mut self, vertices: Range, instances: Range) { + self.render_command(RenderCommand::Draw { + vertices, + instances, + }); + } + #[inline] pub fn render_command(&mut self, render_command: RenderCommand) { self.render_commands.push(render_command); diff --git a/crates/bevy_render/src/mesh/mesh.rs b/crates/bevy_render/src/mesh/mesh.rs index 7b19f6e9e9a972..69c71a1e61149b 100644 --- a/crates/bevy_render/src/mesh/mesh.rs +++ b/crates/bevy_render/src/mesh/mesh.rs @@ -278,7 +278,7 @@ impl Mesh { } } - fn count_vertices(&self) -> usize { + pub fn count_vertices(&self) -> usize { let mut vertex_count: Option = None; for (attribute_name, attribute_data) in self.attributes.iter() { let attribute_len = attribute_data.len(); @@ -387,19 +387,21 @@ pub fn mesh_resource_provider_system( for changed_mesh_handle in changed_meshes.iter() { if let Some(mesh) = meshes.get(changed_mesh_handle) { // TODO: check for individual buffer changes in non-interleaved mode - let index_buffer = render_resource_context.create_buffer_with_data( - BufferInfo { - buffer_usage: BufferUsage::INDEX, - ..Default::default() - }, - &mesh.get_index_buffer_bytes().unwrap(), - ); - - render_resource_context.set_asset_resource( - changed_mesh_handle, - RenderResourceId::Buffer(index_buffer), - INDEX_BUFFER_ASSET_INDEX, - ); + if let Some(data) = mesh.get_index_buffer_bytes() { + let index_buffer = render_resource_context.create_buffer_with_data( + BufferInfo { + buffer_usage: BufferUsage::INDEX, + ..Default::default() + }, + &data, + ); + + render_resource_context.set_asset_resource( + changed_mesh_handle, + RenderResourceId::Buffer(index_buffer), + INDEX_BUFFER_ASSET_INDEX, + ); + } let interleaved_buffer = mesh.get_vertex_buffer_data(); diff --git a/crates/bevy_render/src/pipeline/render_pipelines.rs b/crates/bevy_render/src/pipeline/render_pipelines.rs index 0831e93cd0ad8e..da2928e5fe4c2b 100644 --- a/crates/bevy_render/src/pipeline/render_pipelines.rs +++ b/crates/bevy_render/src/pipeline/render_pipelines.rs @@ -152,6 +152,8 @@ pub fn draw_render_pipelines_system( if let Some(indices) = index_range.clone() { draw.draw_indexed(indices, 0, 0..1); + } else { + draw.draw(0..mesh.count_vertices() as u32, 0..1) } } }