Skip to content

clutter: Fix offscreen-effect painting of clones

Daniel van Vugt requested to merge vanvugt/mutter:fix-offscreen-clones-v1 into master

ClutterOffscreenEffect had been getting the wrong bounding box in the case of clones and descendents of clones, causing visibly incorrect clipping. This was due to clutter_actor_get_paint_box only ever being given the source actor during a paint (which is correct) and not the clone. Even if we weren't painting a clone but an offscreened descendent of a clone (like in gnome-shell's desktop zoom), we would get the wrong result.

Fortunately we don't need to know the actual clone/actor being painted so don't need to call the problematic clutter_actor_get_paint_box at all. The solution is to only keep untransformed rendering in the FBO and leave the correct transformation for later. The correct clone/actor's transformation is already set for us as the current cogl modelview matrix by clutter_actor_paint.

Bonus optimization: This all means we don't need to keep last_matrix_drawn or force a full repaint every time some part of the transformation changes. Because the FBO contents are no longer affected by transformations. As it should be. In other words, offscreen-effected actors can now move around on screen without themselves being repainted.

Special thanks to Mai Lavelle for identifying the cause of the problem.

Closes: https://bugzilla.gnome.org/show_bug.cgi?id=789050, https://bugzilla.gnome.org/show_bug.cgi?id=659523#c9, #196 (closed), #282 (closed), gnome-shell#387 (closed), https://launchpad.net/bugs/1767648, https://launchpad.net/bugs/1779615

Edited by Daniel van Vugt

Merge request reports