Skip to content

Commit c02b4e5

Browse files
committed
Merge pull request godotengine#102161 from stuartcarnie/2d_clip_children
2D: Fix clip children and rendering artefacts
2 parents a013481 + 0a9cd5e commit c02b4e5

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

drivers/gles3/rasterizer_canvas_gles3.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -568,8 +568,6 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_
568568

569569
// Clear out state used in 2D pass
570570
reset_canvas();
571-
state.current_batch_index = 0;
572-
state.canvas_instance_batches.clear();
573571
state.current_data_buffer_index = (state.current_data_buffer_index + 1) % state.canvas_instance_data_buffers.size();
574572
state.current_instance_buffer_index = 0;
575573
}
@@ -807,6 +805,8 @@ void RasterizerCanvasGLES3::_render_items(RID p_to_render_target, int p_item_cou
807805
}
808806

809807
glDisable(GL_SCISSOR_TEST);
808+
state.current_batch_index = 0;
809+
state.canvas_instance_batches.clear();
810810
state.last_item_index += index;
811811
}
812812

@@ -1567,7 +1567,9 @@ void RasterizerCanvasGLES3::_add_to_batch(uint32_t &r_index, bool &r_batch_broke
15671567

15681568
void RasterizerCanvasGLES3::_new_batch(bool &r_batch_broken) {
15691569
if (state.canvas_instance_batches.size() == 0) {
1570-
state.canvas_instance_batches.push_back(Batch());
1570+
Batch new_batch;
1571+
new_batch.instance_buffer_index = state.current_instance_buffer_index;
1572+
state.canvas_instance_batches.push_back(new_batch);
15711573
return;
15721574
}
15731575

servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -914,8 +914,6 @@ void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p
914914
}
915915

916916
texture_info_map.clear();
917-
state.current_batch_index = 0;
918-
state.canvas_instance_batches.clear();
919917
state.current_data_buffer_index = (state.current_data_buffer_index + 1) % BATCH_DATA_BUFFER_COUNT;
920918
state.current_instance_buffer_index = 0;
921919
}
@@ -2289,6 +2287,8 @@ void RendererCanvasRenderRD::_render_batch_items(RenderTarget p_to_render_target
22892287

22902288
RD::get_singleton()->draw_list_end();
22912289

2290+
state.current_batch_index = 0;
2291+
state.canvas_instance_batches.clear();
22922292
state.last_instance_index += instance_index;
22932293
}
22942294

@@ -3200,7 +3200,9 @@ void RendererCanvasRenderRD::_render_batch(RD::DrawListID p_draw_list, CanvasSha
32003200

32013201
RendererCanvasRenderRD::Batch *RendererCanvasRenderRD::_new_batch(bool &r_batch_broken) {
32023202
if (state.canvas_instance_batches.size() == 0) {
3203-
state.canvas_instance_batches.push_back(Batch());
3203+
Batch new_batch;
3204+
new_batch.instance_buffer_index = state.current_instance_buffer_index;
3205+
state.canvas_instance_batches.push_back(new_batch);
32043206
return state.canvas_instance_batches.ptr();
32053207
}
32063208

0 commit comments

Comments
 (0)