GLES2 Batching - Fix try_join_item logic for lights

The old logic was incorrect, the first item with lights would prevent joining the next item in case it didn't have lights. Now the check is deferred so that items without lights check to see if the previous item had lights, and if so they prevent a join.
This commit is contained in:
lawnjelly 2020-06-14 08:16:38 +01:00
parent 879014c3ff
commit 94d127ccc3
1 changed files with 9 additions and 5 deletions

View File

@ -2426,15 +2426,19 @@ bool RasterizerCanvasGLES2::try_join_item(Item *p_ci, RenderItemState &r_ris, bo
if (!light_allow_join) { if (!light_allow_join) {
// can't join // can't join
join = false; join = false;
// we also dont want to allow joining this item with the next item, because the next item could have no lights!
r_batch_break = true;
} }
} else { } else {
// can't join the next item if it has any lights as it will be by definition affected by different set of lights // if the last item had lights, we should not join it to this one (which has no lights)
if (r_ris.light_region.light_bitfield || r_ris.light_region.shadow_bitfield) {
join = false;
// setting these to zero ensures that any following item with lights will, by definition,
// be affected by a different set of lights, and thus prevent a join
r_ris.light_region.light_bitfield = 0; r_ris.light_region.light_bitfield = 0;
r_ris.light_region.shadow_bitfield = 0; r_ris.light_region.shadow_bitfield = 0;
} }
}
if (reclip) { if (reclip) {
join = false; join = false;