diff --git a/crates/bevy_render/src/draw.rs b/crates/bevy_render/src/draw.rs index e2e7227764eb2..281bde6b7eeac 100644 --- a/crates/bevy_render/src/draw.rs +++ b/crates/bevy_render/src/draw.rs @@ -43,6 +43,10 @@ pub enum RenderCommand { base_vertex: i32, instances: Range, }, + Draw { + vertices: Range, + instances: Range, + }, } /// A component that indicates how to draw an entity. diff --git a/crates/bevy_render/src/render_graph/nodes/pass_node.rs b/crates/bevy_render/src/render_graph/nodes/pass_node.rs index 56089d8e9c3e8..dbc46fe09fc45 100644 --- a/crates/bevy_render/src/render_graph/nodes/pass_node.rs +++ b/crates/bevy_render/src/render_graph/nodes/pass_node.rs @@ -245,6 +245,13 @@ impl Node for PassNode { log::info!("Could not draw indexed because the pipeline layout wasn't fully set for pipeline: {:?}", draw_state.pipeline); } } + RenderCommand::Draw { vertices, instances } => { + if draw_state.can_draw() { + render_pass.draw(vertices.clone(), instances.clone()); + } else { + log::info!("Could not draw because the pipeline layout wasn't fully set for pipeline: {:?}", draw_state.pipeline); + } + } RenderCommand::SetVertexBuffer { buffer, offset, @@ -306,10 +313,13 @@ impl DrawState { self.index_buffer = Some(buffer); } - pub fn can_draw_indexed(&self) -> bool { + pub fn can_draw(&self) -> bool { self.bind_groups.iter().all(|b| b.is_some()) && self.vertex_buffers.iter().all(|v| v.is_some()) - && self.index_buffer.is_some() + } + + pub fn can_draw_indexed(&self) -> bool { + self.can_draw() && self.index_buffer.is_some() } pub fn set_pipeline(