summaryrefslogtreecommitdiff
path: root/engine/src/renderer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/renderer.rs')
-rw-r--r--engine/src/renderer.rs39
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()