From 389dd6704e3e8faa2817d2b6e76f03e208afca47 Mon Sep 17 00:00:00 2001 From: lawnjelly Date: Thu, 18 Feb 2021 09:57:02 +0000 Subject: [PATCH] Batching - prevent joining of lightmasked items It turns out lights masking misbehaves when items that are masked are joined. This PR simply disables joining in this case. --- drivers/gles2/rasterizer_canvas_gles2.cpp | 7 ++++++- drivers/gles3/rasterizer_canvas_gles3.cpp | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/gles2/rasterizer_canvas_gles2.cpp b/drivers/gles2/rasterizer_canvas_gles2.cpp index f5afc64d646..52cffe2dfea 100644 --- a/drivers/gles2/rasterizer_canvas_gles2.cpp +++ b/drivers/gles2/rasterizer_canvas_gles2.cpp @@ -1277,7 +1277,12 @@ bool RasterizerCanvasGLES2::try_join_item(Item *p_ci, RenderItemState &r_ris, bo r_batch_break = false; bool join = true; - // light_masked may possibly need state checking here. Check for regressions! + // light_masked objects we just don't currently support for joining + // (this could possibly be improved at a later date) + if (p_ci->light_masked) { + join = false; + r_batch_break = true; + } // we will now allow joining even if final modulate is different // we will instead bake the final modulate into the vertex colors diff --git a/drivers/gles3/rasterizer_canvas_gles3.cpp b/drivers/gles3/rasterizer_canvas_gles3.cpp index 88416989e00..df0ab12a6ed 100644 --- a/drivers/gles3/rasterizer_canvas_gles3.cpp +++ b/drivers/gles3/rasterizer_canvas_gles3.cpp @@ -1678,7 +1678,12 @@ bool RasterizerCanvasGLES3::try_join_item(Item *p_ci, RenderItemState &r_ris, bo r_batch_break = false; bool join = true; - // light_masked may possibly need state checking here. Check for regressions! + // light_masked objects we just don't currently support for joining + // (this could possibly be improved at a later date) + if (p_ci->light_masked) { + join = false; + r_batch_break = true; + } // we will now allow joining even if final modulate is different // we will instead bake the final modulate into the vertex colors