Skip to content

Commit cb6d9ca

Browse files
committed
Cleanup render batching.
1 parent b112a6b commit cb6d9ca

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

crates/processing_render/src/render/mod.rs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ pub struct RenderContext<'w, 's> {
3131
state: Local<'s, RenderState>,
3232
}
3333

34+
impl <'w, 's> RenderContext<'w, 's> {
35+
pub fn reset(&mut self, graphics_entity: Entity, render_layers: RenderLayers) {
36+
self.batch.reset(graphics_entity, render_layers);
37+
self.state.transform.clear();
38+
}
39+
}
40+
3441
struct BatchState {
3542
current_mesh: Option<Mesh>,
3643
material_key: Option<MaterialKey>,
@@ -53,6 +60,17 @@ impl Default for BatchState {
5360
}
5461
}
5562

63+
impl BatchState {
64+
fn reset(&mut self, graphics_entity: Entity, render_layers: RenderLayers) {
65+
self.current_mesh = None;
66+
self.material_key = None;
67+
self.transform = Affine3A::IDENTITY;
68+
self.draw_index = 0;
69+
self.render_layers = render_layers;
70+
self.graphics_entity = Some(graphics_entity);
71+
}
72+
}
73+
5674
#[derive(Debug)]
5775
pub struct RenderState {
5876
// drawing state
@@ -105,9 +123,7 @@ pub fn flush_draw_commands(
105123
graphics.iter_mut()
106124
{
107125
let draw_commands = std::mem::take(&mut cmd_buffer.commands);
108-
ctx.batch.render_layers = render_layers.clone();
109-
ctx.batch.graphics_entity = Some(graphics_entity);
110-
ctx.batch.draw_index = 0; // Reset draw index for each flush
126+
ctx.reset(graphics_entity, render_layers.clone());
111127

112128
for cmd in draw_commands {
113129
match cmd {

crates/processing_render/src/render/transform.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ impl TransformStack {
2929
self.current = Affine3A::IDENTITY;
3030
}
3131

32+
pub fn clear(&mut self) {
33+
self.current = Affine3A::IDENTITY;
34+
self.stack.clear();
35+
}
36+
3237
pub fn translate(&mut self, x: f32, y: f32) {
3338
self.translate_3d(x, y, 0.0);
3439
}

0 commit comments

Comments
 (0)