Skip to content

Commit 478f947

Browse files
authored
Don't panic if there's no index buffer and call draw (#1229)
1 parent fbf08ac commit 478f947

File tree

3 files changed

+25
-14
lines changed

3 files changed

+25
-14
lines changed

crates/bevy_render/src/draw.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,13 @@ impl Draw {
115115
});
116116
}
117117

118+
pub fn draw(&mut self, vertices: Range<u32>, instances: Range<u32>) {
119+
self.render_command(RenderCommand::Draw {
120+
vertices,
121+
instances,
122+
});
123+
}
124+
118125
#[inline]
119126
pub fn render_command(&mut self, render_command: RenderCommand) {
120127
self.render_commands.push(render_command);

crates/bevy_render/src/mesh/mesh.rs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ impl Mesh {
278278
}
279279
}
280280

281-
fn count_vertices(&self) -> usize {
281+
pub fn count_vertices(&self) -> usize {
282282
let mut vertex_count: Option<usize> = None;
283283
for (attribute_name, attribute_data) in self.attributes.iter() {
284284
let attribute_len = attribute_data.len();
@@ -387,19 +387,21 @@ pub fn mesh_resource_provider_system(
387387
for changed_mesh_handle in changed_meshes.iter() {
388388
if let Some(mesh) = meshes.get(changed_mesh_handle) {
389389
// TODO: check for individual buffer changes in non-interleaved mode
390-
let index_buffer = render_resource_context.create_buffer_with_data(
391-
BufferInfo {
392-
buffer_usage: BufferUsage::INDEX,
393-
..Default::default()
394-
},
395-
&mesh.get_index_buffer_bytes().unwrap(),
396-
);
397-
398-
render_resource_context.set_asset_resource(
399-
changed_mesh_handle,
400-
RenderResourceId::Buffer(index_buffer),
401-
INDEX_BUFFER_ASSET_INDEX,
402-
);
390+
if let Some(data) = mesh.get_index_buffer_bytes() {
391+
let index_buffer = render_resource_context.create_buffer_with_data(
392+
BufferInfo {
393+
buffer_usage: BufferUsage::INDEX,
394+
..Default::default()
395+
},
396+
&data,
397+
);
398+
399+
render_resource_context.set_asset_resource(
400+
changed_mesh_handle,
401+
RenderResourceId::Buffer(index_buffer),
402+
INDEX_BUFFER_ASSET_INDEX,
403+
);
404+
}
403405

404406
let interleaved_buffer = mesh.get_vertex_buffer_data();
405407

crates/bevy_render/src/pipeline/render_pipelines.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ pub fn draw_render_pipelines_system(
152152

153153
if let Some(indices) = index_range.clone() {
154154
draw.draw_indexed(indices, 0, 0..1);
155+
} else {
156+
draw.draw(0..mesh.count_vertices() as u32, 0..1)
155157
}
156158
}
157159
}

0 commit comments

Comments
 (0)