clutter: Fix offscreen-effect painting of clones
authorDaniel van Vugt <daniel.van.vugt@canonical.com>
Thu, 24 May 2018 09:51:22 +0000 (17:51 +0800)
committerSimon McVittie <smcv@debian.org>
Wed, 6 Feb 2019 10:02:14 +0000 (10:02 +0000)
commit4ca469fe4669c8d258553435943c962b59b61328
tree6b645b1b8d0e2e175c4f7d7c7d4567102a6f9aed
parentf380d4b0cdb24eedaaf7fb06e3b6ba3ecce8b0ab
clutter: Fix offscreen-effect painting of clones

`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.

Fixes:
https://bugzilla.gnome.org/show_bug.cgi?id=789050,
https://bugzilla.gnome.org/show_bug.cgi?id=659523#c9,
https://gitlab.gnome.org/GNOME/mutter/issues/196,
https://gitlab.gnome.org/GNOME/mutter/issues/282,
https://gitlab.gnome.org/GNOME/gnome-shell/issues/387,
https://launchpad.net/bugs/1767648,
https://launchpad.net/bugs/1779615

Origin: https://gitlab.gnome.org/vanvugt/mutter/commit/9a466f289318050bde065bc8878947cb2691bc98
Bug-Ubuntu: https://launchpad.net/bugs/1767648, https://launchpad.net/bugs/1779615
Applied-Upstream: 3.31.90

Gbp-Pq: Name clutter-Fix-offscreen-effect-painting-of-clones.patch
clutter/clutter/clutter-actor-box-private.h [new file with mode: 0644]
clutter/clutter/clutter-actor-box.c
clutter/clutter/clutter-offscreen-effect.c
clutter/clutter/clutter-paint-volume.c
clutter/tests/conform/Makefile.am
clutter/tests/conform/actor-offscreen-limit-max-size.c [deleted file]
clutter/tests/conform/actor-offscreen-redirect.c