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:
parent
879014c3ff
commit
94d127ccc3
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue