diff options
Diffstat (limited to 'engine/src/renderer.rs')
| -rw-r--r-- | engine/src/renderer.rs | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/engine/src/renderer.rs b/engine/src/renderer.rs index 52764db..b52e6b9 100644 --- a/engine/src/renderer.rs +++ b/engine/src/renderer.rs @@ -191,10 +191,40 @@ pub enum Command mesh: Mesh, usage: MeshUsage, }, - DrawMesh(ObjectId), + DrawMesh(ObjectId, DrawMeshOptions), UpdateDrawProperties(DrawProperties, DrawPropertiesUpdateFlags), } +builder! { + #[builder(name = DrawMeshOptionsBuilder, derives = (Debug, Default, Clone))] + #[derive(Debug, Default, Clone)] + #[non_exhaustive] + pub struct DrawMeshOptions { + pub element_offset: u32, + pub vertex_offset: u32, + + #[builder(skip_generate_fn)] + pub element_cnt: Option<u32>, + } +} + +impl DrawMeshOptions +{ + pub fn builder() -> DrawMeshOptionsBuilder + { + DrawMeshOptionsBuilder::default() + } +} + +impl DrawMeshOptionsBuilder +{ + pub fn element_cnt(mut self, element_cnt: u32) -> Self + { + self.element_cnt = Some(element_cnt); + self + } +} + bitflags! { #[derive(Debug)] pub struct BufferClearMask: u8 { @@ -531,9 +561,10 @@ pub fn add_main_render_passes( }); } - render_pass - .commands - .push(Command::DrawMesh(ObjectId::Asset(mesh_asset.id()))); + render_pass.commands.push(Command::DrawMesh( + ObjectId::Asset(mesh_asset.id()), + DrawMeshOptions::default(), + )); if let Some(draw_flags) = draw_flags.as_deref() && draw_flags.polygon_mode_config != PolygonModeConfig::default() |
