Skip to content

Commit

Permalink
Don't panic if there's no index buffer and call draw (bevyengine#1229)
Browse files Browse the repository at this point in the history
  • Loading branch information
JCapucho authored and rparrett committed Jan 27, 2021
1 parent 672fb8d commit 0fbbd87
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 14 deletions.
7 changes: 7 additions & 0 deletions crates/bevy_render/src/draw.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,13 @@ impl Draw {
});
}

pub fn draw(&mut self, vertices: Range<u32>, instances: Range<u32>) {
self.render_command(RenderCommand::Draw {
vertices,
instances,
});
}

#[inline]
pub fn render_command(&mut self, render_command: RenderCommand) {
self.render_commands.push(render_command);
Expand Down
30 changes: 16 additions & 14 deletions crates/bevy_render/src/mesh/mesh.rs
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ impl Mesh {
}
}

fn count_vertices(&self) -> usize {
pub fn count_vertices(&self) -> usize {
let mut vertex_count: Option<usize> = None;
for (attribute_name, attribute_data) in self.attributes.iter() {
let attribute_len = attribute_data.len();
Expand Down Expand Up @@ -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();

Expand Down
2 changes: 2 additions & 0 deletions crates/bevy_render/src/pipeline/render_pipelines.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
}
Expand Down

0 comments on commit 0fbbd87

Please sign in to comment.