1
0
Fork 0
mutter-performance-source/clutter/tests/conform
Daniel van Vugt 8655bc5d8d 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
2019-01-24 17:00:25 +00:00
..
scripts
actor-anchors.c clutter/tests: Update expectations in actor-anchors test 2018-12-18 13:51:44 +01:00
actor-destroy.c
actor-graph.c clutter: conform/actor-graph: Add missing null-termination 2017-05-05 09:53:51 -04:00
actor-invariants.c
actor-iter.c
actor-layout.c
actor-meta.c
actor-offscreen-redirect.c clutter: Fix offscreen-effect painting of clones 2019-01-24 17:00:25 +00:00
actor-paint-opacity.c
actor-pick.c
actor-shader-effect.c tests: Don't check pixels outside actor allocation 2018-12-18 13:54:09 +01:00
actor-size.c
animator.c
behaviours.c
binding-pool.c
cairo-texture.c
cally-text.c
color.c
group.c
interval.c
meson.build clutter: Fix offscreen-effect painting of clones 2019-01-24 17:00:25 +00:00
model.c
path.c
rectangle.c
score.c
script-parser.c
state.c
text-cache.c
text.c
texture-fbo.c
texture.c
timeline-interpolate.c
timeline-progress.c
timeline-rewind.c
timeline.c
units.c