summaryrefslogtreecommitdiff
path: root/clutter/clutter/clutter-offscreen-effect.c
Commit message (Collapse)AuthorAgeFilesLines
* clutter/offscreen-effect: Clear offscreen when pre-paint failsGeorges Basile Stavracas Neto2020-02-021-4/+11
| | | | | | | | | | | | | | | | | | Some ClutterOffscreenEffect subclasses, such as ClutterBrightnessContrastEffect, early-return FALSE in pre-paint before chaining up. It's an important optimization that avoids creating or updating the offscreen framebuffer. However, if an offscreen framebuffer already exists by the time pre-paint fails, it will be used *without* repaint the actor over it. That causes an old picture of the actor to be displayed. Fix that by always clearing the offscreen framebuffer when pre-paint fails. Fixes https://gitlab.gnome.org/GNOME/mutter/issues/810 https://gitlab.gnome.org/GNOME/mutter/merge_requests/992 (cherry picked from commit 64685f4b20162b78964a5ab6fd57a93fb3860671)
* clutter/offscreen-effect: Clear offscreen framebuffer when disablingGeorges Basile Stavracas Neto2020-02-021-0/+14
| | | | | | | | | | | | | | | | | | When changing the 'enabled' property and disabling the offscreen effect, it doesn't make sense to preserve the offscreen framebuffer. It's not drawing, after all. Furthermore, because ClutterOffscreenEffect only checks if the offscreen framebuffer exists to decide whether or not to redraw, keeping the fbo alive is a waste of resources. Clear the offscreen framebuffer when the effect is disabled or enabled. Fixes https://gitlab.gnome.org/GNOME/mutter/issues/810 https://gitlab.gnome.org/GNOME/mutter/merge_requests/992 (cherry picked from commit bf594e9fb6d973259163f73881dd91c8910dd54f)
* clutter/offscreen-effect: Use g_clear_pointer for cleanupGeorges Basile Stavracas Neto2020-02-021-24/+6
| | | | | | | | It does the exact same checks, and saves us a few lines of code. https://gitlab.gnome.org/GNOME/mutter/merge_requests/992 (cherry picked from commit 3958e75ed2a9afb5d32c59b017691e3ed2289ee2)
* clutter/offscreen-effect: Make sure we use linear filter for fractional scalingMarco Trevisan (Treviño)2019-03-011-11/+28
| | | | | | | | | | | | | | | When we try to update the FB, we might face the case in which the effect target framebuffer does not need any redraw, because it's already properly sized and scaled, but the filter applied to the pipeline is not, because it has been computed for a non-fractional scaling. This is happens for example to clutter actors with a flattening effect (i.e. override redirect mode set), that might have been generated properly for a celied scaling level, but when we go fractional we need to ensure to use a linear filter, as the 1:1 texel:pixel assumption is not true anymore. https://bugzilla.gnome.org/show_bug.cgi?id=765011 https://gitlab.gnome.org/GNOME/mutter/merge_requests/3
* clutter/offscreen-effect: Support adding effect to resource scaled actorsMarco Trevisan (Treviño)2019-03-011-20/+55
| | | | | | | | | | | | | | | At this level we use ceiled resource-scale when painting fractional value When using fractional scaling we still need to create an integer-sized texture and then we should paint it using a size which is proportional to the real actor size ratio, and only paint a subsample of it, but this doesn't seem to work properly with some weird scaling values. Then, it's just better to draw the texture ceiled and then we scale it down to match the proper actor scaling at paint level. https://bugzilla.gnome.org/show_bug.cgi?id=765011 https://gitlab.gnome.org/GNOME/mutter/merge_requests/3
* clutter: Fix offscreen-effect painting of clonesDaniel van Vugt2019-01-241-96/+76
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `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
* clutter-*-effect: Remove cogl_rectangle()Georges Basile Stavracas Neto2018-11-181-6/+8
| | | | | | | | All those effects have the same basic pattern of setting a color of a pipeline, then drawing a rect with cogl_rectangle(). Thus, replacing those was as easy as retrieving the draw framebuffer and calling cogl_framebuffer_draw_rectangle() on it.
* clutter-offscreen-effect: Disable if no textureDaniel van Vugt2018-11-081-3/+6
| | | | | | | | | | | | | If texture allocation fails (e.g. on an old GPU with size limit 2048) then `update_fbo` would return `FALSE` but leaves `priv->offscreen` as non-NULL. So the next paint will try to use the offscreen with a `NULL` texture and crashes. The solution is simply to ensure that `priv->offscreen` is NULL if there is no `priv->texture`, so the default (non-offscreen) paint path gets used instead. Bug reported and fix provided by Gert van de Kraats. https://launchpad.net/bugs/1795774
* clutter: Unconditionally include clutter-build-config.hJonas Ådahl2018-11-061-2/+0
|
* Remove cogl-1.0 vs cogl-2.0 vs cogl experimental API splitJonas Ådahl2016-07-201-3/+1
| | | | | | | | | | | Mutter (and libmutter users) are the only users of this version of cogl, and will more or less only use the cogl-1.0, cogl-2.0 and cogl experimental API variants, and having the possibility of having different API versions of the same API depending on what file includes it is error prone and confusing. Lets just remove the possibility of having different versions of the same API. https://bugzilla.gnome.org/show_bug.cgi?id=768977
* Don't use config.h in clutter and coglJonas Ådahl2016-07-201-1/+1
| | | | | | | | In cogl use cogl-config.h and in clutter use clutter-build-config.h. We can't use clutter-config.h in clutter because its already used and installed. https://bugzilla.gnome.org/show_bug.cgi?id=768976
* move everything into a clutter/ directoryRui Matos2016-04-121-0/+671