summaryrefslogtreecommitdiff
path: root/clutter/clutter/clutter-actor.h
Commit message (Collapse)AuthorAgeFilesLines
* clutter: Introduce geometric pickingDaniel van Vugt2019-09-021-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, Clutter does picking by drawing with Cogl and reading the pixel that's beneath the given point. Since Cogl has a journal that records drawing operations, and has optimizations to read a single pixel from a list of rectangle, it would be expected that we would hit this fast path and not flush the journal while picking. However, that's not the case: dithering, clipping with scissors, etc, can all flush the journal, issuing commands to the GPU and making picking slow. On NVidia-based systems, this glReadPixels() call is extremely costly. Introduce geometric picking, and avoid using the Cogl journal entirely. Do this by introducing a stack of actors in ClutterStage. This stack is cached, but for now, don't use the cache as much as possible. The picking routines are still tied to painting. When projecting the actor vertexes, do it manually and take the modelview matrix of the framebuffer into account as well. CPU usage on an Intel i7-7700, tested with two different GPUs/drivers: | | Intel | Nvidia | | ------: | --------: | -----: | | Moving the mouse: | | Before | 10% | 10% | | After | 6% | 6% | | Moving a window: | | Before | 23% | 81% | | After | 19% | 40% | Closes: https://gitlab.gnome.org/GNOME/mutter/issues/154, https://gitlab.gnome.org/GNOME/mutter/issues/691 Helps significantly with: https://gitlab.gnome.org/GNOME/mutter/issues/283, https://gitlab.gnome.org/GNOME/mutter/issues/590, https://gitlab.gnome.org/GNOME/mutter/issues/700 v2: Fix code style issues Simplify quadrilateral checks Remove the 0.5f hack Differentiate axis-aligned rectangles https://gitlab.gnome.org/GNOME/mutter/merge_requests/189
* clutter: Add API to get the resource scale of an actorJonas Ådahl2019-03-011-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A clutter actor might be painted on a stage view with a view scale other than 1. In this case, to show the content in full resolution, the actor must use a higher resolution resource (e.g. texture), which will be down scaled to the stage coordinate space, then scaled up again to the stage view framebuffer scale. Use a 'resource-scale' property to save information and notify when it changes. The resource scale is the ceiled value of the highest stage view scale a actor is visible on. The value is ceiled because using a higher resolution resource consistently results in better output quality. One reason for this is that rendering is often not perfectly pixel aligned, meaning even if we load a resource with a suitable size, due to us still scaling ever so slightly, the quality is affected. Using a higher resolution resource avoids this problem. For situations inside clutter where the actual maximum view scale is needed, a function _clutter_actor_get_real_resource_scale() is provided, which returns the non-ceiled value. Make sure we ignore resource scale computation requests during size requests or allocation while ensure we've proper resource-scale on pre-paint. https://bugzilla.gnome.org/show_bug.cgi?id=765011 https://gitlab.gnome.org/GNOME/mutter/merge_requests/3
* clutter: Add ClutterPaintVolume argument to ClutterActor::queue_redrawCarlos Garnacho2019-02-251-2/+3
| | | | | | | | | | | | | | | | This is an ABI break, hopefully an unimportant one since this signal/vmethod is barely overridden. The signal has been added an extra ClutterPaintVolume argument, and has been given a boolean return value. The recursion to the parents has been taken out of the default implementation and into the caller, using the returned boolean parameter to control further propagation. Passing the ClutterPaintVolume is easier on performance, as we don't need setting this pointer as gobject data just to retrieve/unset it further in propagation. https://bugzilla.gnome.org/show_bug.cgi?id=782344
* clutter: Remove clutter specific versionJonas Ådahl2018-11-061-189/+189
| | | | Use the mutter version when something is still needed.
* Remove cogl-1.0 vs cogl-2.0 vs cogl experimental API splitJonas Ådahl2016-07-201-3/+0
| | | | | | | | | | | 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
* move everything into a clutter/ directoryRui Matos2016-04-121-0/+904