Commit a2fc6f8e authored by Jacopo De Simoi's avatar Jacopo De Simoi Committed by Jacopo De Simoi

Fix fullRepaints loop

The method paintSimpleScreen is responsible for redrawing the parts of
the back-buffer that need updating using the buffer_age extension.
The method fails to set correctly the damaged_region if, for some
reason, one frame needs a repaint of the whole screen. In this case
the backbuffer will request a full-screen repaint at some future
frame, so the dirty region will be extended to full-screen. However,
in this case the repaintRegion is not subtracted from the
damaged_region (as it is done for the non fullRepaints case below
--see the comment below--) and the damaged_region is reported to be the full
screen again. This causes all the subsequent frames to be reported
with a full screen damage, which causes some penalty, until
paintGenericScreen is invoked for some reason and then the damage gets
reset correctly.

We now set the correct damage and prevent falling into the fullRepaint
parent 3284e196
......@@ -370,7 +370,7 @@ void Scene::paintSimpleScreen(int orig_mask, const QRegion &region)
if (fullRepaint) {
painted_region = displayRegion;
damaged_region = displayRegion;
damaged_region = displayRegion - repaintClip;
} else {
painted_region |= paintedArea;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment