Batching - BackBuffer copy fix

For fixing a previous issue state.canvas_texscreen_used was reset to false at the start of each render_joined_item. This was causing a later shader that used SCREEN_TEXTURE to force recapturing the back buffer immediately prior to use, which we don't want.

This PR preserves the state across joined items, and also prevents joining of items that copy the back buffer as this may be problematic.

It turns out that the original issue that needed the line is now fixed, and the later issue is also fixed by removing it.
This commit is contained in:
lawnjelly 2020-11-24 13:24:15 +00:00
parent 5a66e66448
commit 7c4cf1c043
3 changed files with 5 additions and 8 deletions

View file

@ -1946,10 +1946,6 @@ void RasterizerCanvasGLES2::render_joined_item(const BItemJoined &p_bij, RenderI
}
#endif
// this must be reset for each joined item,
// it only exists to prevent capturing the screen more than once per item
state.canvas_texscreen_used = false;
// all the joined items will share the same state with the first item
Item *ci = bdata.item_refs[p_bij.first_item_ref].item;

View file

@ -1203,10 +1203,6 @@ void RasterizerCanvasGLES3::render_joined_item(const BItemJoined &p_bij, RenderI
}
#endif
// this must be reset for each joined item,
// it only exists to prevent capturing the screen more than once per item
state.canvas_texscreen_used = false;
// all the joined items will share the same state with the first item
Item *p_ci = bdata.item_refs[p_bij.first_item_ref].item;

View file

@ -3048,6 +3048,11 @@ PREAMBLE(bool)::_detect_item_batch_break(RenderItemState &r_ris, RasterizerCanva
} // else
// special case, back buffer copy, so don't join
if (p_ci->copy_back_buffer) {
return true;
}
return false;
}