mutter/clutter
Robert Bragg 1bdb0e6e98 cogl: Implements a software only read-pixel fast-path
This adds a transparent optimization to cogl_read_pixels for when a
single pixel is being read back and it happens that all the geometry of
the current frame is still available in the framebuffer's associated
journal.

The intention is to indirectly optimize Clutter's render based picking
mechanism in such a way that the 99% of cases where scenes are comprised
of trivial quad primitives that can easily be intersected we can avoid
the latency of kicking a GPU render and blocking for the result when we
know we can calculate the result manually on the CPU probably faster
than we could even kick a render.

A nice property of this solution is that it maintains all the
flexibility of the render based picking provided by Clutter and it can
gracefully fall back to GPU rendering if actors are drawn using anything
more complex than a quad for their geometry.

It seems worth noting that there is a limitation to the extensibility of
this approach in that it can only optimize picking a against geometry
that passes through Cogl's journal which isn't something Clutter
directly controls.  For now though this really doesn't matter since
basically all apps should end up hitting this fast-path. The current
idea to address this longer term would be a pick2 vfunc for ClutterActor
that can support geometry and render based input regions of actors and
move this optimization up into Clutter instead.

Note: currently we don't have a primitive count threshold to consider
that there could be scenes with enough geometry for us to compensate for
the cost of kicking a render and determine a result more efficiently by
utilizing the GPU. We don't currently expect this to be common though.

Note: in the future it could still be interesting to revive something
like the wip/async-pbo-picking branch to provide an asynchronous
read-pixels based optimization for Clutter picking in cases where more
complex input regions that necessitate rendering are in use or if we do
add a threshold for rendering as mentioned above.
2011-01-21 16:18:11 +00:00
..
cally cally: Allow memory management for actions 2010-12-14 10:07:32 +00:00
cogl cogl: Implements a software only read-pixel fast-path 2011-01-21 16:18:11 +00:00
egl cogl: Adds _cogl_swap_buffers_notify for clutter backends 2011-01-21 16:18:10 +00:00
evdev evdev: Add a comment to revisit the GSource management with glib 2.28 2010-11-30 14:50:13 +00:00
fruity cogl: Adds _cogl_swap_buffers_notify for clutter backends 2011-01-21 16:18:10 +00:00
glx cogl: Adds _cogl_swap_buffers_notify for clutter backends 2011-01-21 16:18:10 +00:00
osx cogl: Adds _cogl_swap_buffers_notify for clutter backends 2011-01-21 16:18:10 +00:00
wayland cogl: Adds _cogl_swap_buffers_notify for clutter backends 2011-01-21 16:18:10 +00:00
win32 cogl: Adds _cogl_swap_buffers_notify for clutter backends 2011-01-21 16:18:10 +00:00
x11 ClutterX11TexturePixmap: Fix doc comment 2011-01-17 12:21:22 +00:00
clutter-action.c
clutter-action.h Add named modifiers for Action and Constraint 2010-05-20 11:19:51 +01:00
clutter-actor-box.c Merge branch 'private-cleanup' 2010-10-25 23:44:53 +01:00
clutter-actor-meta-private.h Add copyright notices 2010-10-21 13:13:00 +01:00
clutter-actor-meta.c Set the signal handler to 0 when disconnecting it. 2010-11-29 10:54:33 +00:00
clutter-actor-meta.h Add copyright notices 2010-10-21 13:13:00 +01:00
clutter-actor-private.h Remove unnecessary duplicate name for private enumerations 2010-12-10 16:03:10 +00:00
clutter-actor.c Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-actor.h Reduce the amount of g-ir-scanner warnings 2010-12-09 12:36:50 +00:00
clutter-align-constraint.c Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-align-constraint.h Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-alpha.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-alpha.h
clutter-animatable.c Use G_DEFINE_INTERFACE 2010-10-18 11:26:44 +01:00
clutter-animatable.h animatable: Allow passing a NULL animation 2010-07-31 10:56:09 +01:00
clutter-animation.c animation: Allow transforming values in bind() 2010-12-11 17:43:23 +00:00
clutter-animation.h animation: Allow detaching an animation from an actor 2010-09-10 11:18:53 +01:00
clutter-animator.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-animator.h
clutter-backend-private.h Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-backend.c Clean up clutter-private.h/4 2010-10-21 12:22:17 +01:00
clutter-backend.h Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-behaviour-depth.c Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-behaviour-depth.h Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-behaviour-ellipse.c Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-behaviour-ellipse.h Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-behaviour-opacity.c Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-behaviour-opacity.h Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-behaviour-path.c Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-behaviour-path.h Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-behaviour-rotate.c Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-behaviour-rotate.h Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-behaviour-scale.c Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-behaviour-scale.h Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-behaviour.c Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-behaviour.h Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-bezier.c
clutter-bezier.h
clutter-bin-layout.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-bin-layout.h
clutter-bind-constraint.c Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-bind-constraint.h Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-binding-pool.c Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-binding-pool.h Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-blur-effect.c Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-blur-effect.h Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-box-layout.c box-layout: Plug a memory leak 2010-10-08 13:29:49 +01:00
clutter-box-layout.h
clutter-box.c Remove unnecessary GLib version checks 2010-10-18 11:26:45 +01:00
clutter-box.h
clutter-cairo-texture.c gtk-doc: Fixes for the API references 2010-11-08 16:01:19 +00:00
clutter-cairo-texture.h gtk-doc: Fixes for the API references 2010-11-08 16:01:19 +00:00
clutter-child-meta.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-child-meta.h
clutter-click-action.c click-action: add API to get modifier type 2011-01-17 17:31:46 +00:00
clutter-click-action.h click-action: add API to get modifier type 2011-01-17 17:31:46 +00:00
clutter-clone.c Don't update or use last_paint_box when painting inside a clone 2010-11-23 12:50:29 +00:00
clutter-clone.h
clutter-color-static.h color: Add named, global colors 2010-11-11 13:14:23 +00:00
clutter-color.c color: Mark the new static color API as being new from 1.6 2011-01-17 15:22:48 +00:00
clutter-color.h color: Mark the new static color API as being new from 1.6 2011-01-17 15:22:48 +00:00
clutter-colorize-effect.c Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-colorize-effect.h Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-config.h.in build: Generate an instealled config header 2011-01-19 14:33:27 +00:00
clutter-constraint.c docs: Fix some wrong function/signal/property names 2010-11-18 15:21:16 +00:00
clutter-constraint.h constraint: Add ::update_allocation() 2010-09-17 12:17:50 +01:00
clutter-container.c container: Do not use Actor as prerequisite 2011-01-10 14:03:35 +00:00
clutter-container.h container: Add child_notify() wrapper 2010-09-30 14:58:23 +01:00
clutter-debug.h debug: Do not use '&' in the messages 2010-10-19 01:42:19 +01:00
clutter-deform-effect.c Fixed a typo in a doc string 2010-12-17 13:37:05 +00:00
clutter-deform-effect.h build: Re-arrange headers 2010-11-18 18:23:49 +00:00
clutter-deprecated.h
clutter-desaturate-effect.c Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-desaturate-effect.h Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-device-manager-private.h evdev: First stab at an evdev backend 2010-11-30 14:40:37 +00:00
clutter-device-manager.c Clean up clutter-private.h/4 2010-10-21 12:22:17 +01:00
clutter-device-manager.h Reduce the amount of g-ir-scanner warnings 2010-12-09 12:36:50 +00:00
clutter-drag-action.c drag-action: fix case where motion events are indefinitely disabled 2011-01-18 14:48:14 +00:00
clutter-drag-action.h drag-action: Added x-drag-threshold and y-drag-threshold properties 2010-09-07 10:40:49 +01:00
clutter-effect.c paint volumes: another pass at the design 2010-09-29 15:12:57 +01:00
clutter-effect.h build: Re-arrange headers 2010-11-18 18:23:49 +00:00
clutter-enum-types.c.in
clutter-enum-types.h.in
clutter-event.c Clean up clutter-private.h/4 2010-10-21 12:22:17 +01:00
clutter-event.h Remove trailin enum commas, avoiding C++ warnings. 2010-09-13 15:45:55 +01:00
clutter-feature.c Clean up clutter-private.h/4 2010-10-21 12:22:17 +01:00
clutter-feature.h
clutter-fixed-layout.c
clutter-fixed-layout.h
clutter-fixed.c Add caller-allocates annotations 2010-09-08 17:04:21 +01:00
clutter-fixed.h introspection: Skip some C-only structures 2010-12-10 17:15:39 +00:00
clutter-flow-layout.c Move more classes to install_properties() 2010-10-18 11:26:45 +01:00
clutter-flow-layout.h
clutter-frame-source.c Start using the monotonic API in GLib ≥ 2.27 2010-11-17 16:19:10 +00:00
clutter-frame-source.h Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-group.c paint volumes: another pass at the design 2010-09-29 15:12:57 +01:00
clutter-group.h
clutter-id-pool.c
clutter-id-pool.h
clutter-input-device.c Fixed a crash when destroying the actor of a LEAVE event 2010-12-30 12:27:26 +00:00
clutter-input-device.h evdev: First stab at an evdev backend 2010-11-30 14:40:37 +00:00
clutter-interval.c interval: Remember to chain up to parent in finalize() 2010-10-25 00:31:36 +01:00
clutter-interval.h
clutter-keysyms-compat.h keysyms: Update the list 2010-12-02 09:53:00 +00:00
clutter-keysyms-table.h
clutter-keysyms-update.pl keysyms: Update the macros to CLUTTER_KEY_* 2010-09-10 17:54:52 +01:00
clutter-keysyms.h keysyms: Update the list 2010-12-02 09:53:00 +00:00
clutter-layout-manager.c Remove unnecessary GLib version checks 2010-10-18 11:26:45 +01:00
clutter-layout-manager.h Reduce the amount of g-ir-scanner warnings 2010-12-09 12:36:50 +00:00
clutter-layout-meta.c Conditionally use g_object_notify_by_pspec 2010-08-10 17:12:06 +01:00
clutter-layout-meta.h
clutter-list-model.c ClutterListModel: Implement get_n_rows for improved performance 2011-01-10 21:22:22 +00:00
clutter-list-model.h
clutter-main.c cogl: Implements a software only read-pixel fast-path 2011-01-21 16:18:11 +00:00
clutter-main.h Deprecate ClutterFrameSource 2010-11-06 20:11:16 +00:00
clutter-marshal.list path-constraint: Add a ::node-reached signal 2010-11-07 21:35:40 +00:00
clutter-master-clock.c Start using the monotonic API in GLib ≥ 2.27 2010-11-17 16:19:10 +00:00
clutter-master-clock.h
clutter-media.c Use G_DEFINE_INTERFACE 2010-10-18 11:26:44 +01:00
clutter-media.h
clutter-model-private.h
clutter-model.c ClutterListModel: Implement get_n_rows for improved performance 2011-01-10 21:22:22 +00:00
clutter-model.h
clutter-offscreen-effect.c ClutterOffscreenEffect: Don't throw away the material for a new actor 2010-11-29 10:55:52 +00:00
clutter-offscreen-effect.h Reduce the amount of g-ir-scanner warnings 2010-12-09 12:36:50 +00:00
clutter-page-turn-effect.c Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-page-turn-effect.h Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-paint-volume-private.h Add copyright notices 2010-10-21 13:13:00 +01:00
clutter-paint-volume.c use cogl_matrix_transform_points in clutter 2010-11-23 12:50:29 +00:00
clutter-path-constraint.c Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-path-constraint.h Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-path.c Clean up clutter-private.h/6 2010-10-21 12:22:17 +01:00
clutter-path.h
clutter-private.h Deprecate ClutterFrameSource 2010-11-06 20:11:16 +00:00
clutter-profile.c profile: Update to uprof-0.3 dep for --enable-profile 2010-09-14 12:43:16 +01:00
clutter-profile.h profile: Update to uprof-0.3 dep for --enable-profile 2010-09-14 12:43:16 +01:00
clutter-rectangle.c introspection: Add missing (out) annotations for get_color() 2011-01-17 17:31:59 +00:00
clutter-rectangle.h
clutter-score.c clutter-score: Initialize ClutterScoreEntry::complete_id 2010-12-07 21:44:32 +00:00
clutter-score.h
clutter-script-parser.c script-parser: Also honor properties of type GType 2011-01-11 12:37:53 +00:00
clutter-script-private.h script: Fix the memory management 2010-10-19 01:42:19 +01:00
clutter-script.c docs: Fix some wrong function/signal/property names 2010-11-18 15:21:16 +00:00
clutter-script.h
clutter-scriptable.c Use G_DEFINE_INTERFACE 2010-10-18 11:26:44 +01:00
clutter-scriptable.h Reduce the amount of g-ir-scanner warnings 2010-12-09 12:36:50 +00:00
clutter-settings.c Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-settings.h Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-shader-effect.c Make clutter_shader_effect_set_uniform_value accept G_TYPE_DOUBLE 2010-12-09 11:57:06 +00:00
clutter-shader-effect.h
clutter-shader-types.c shader-types: Check the size of the values 2010-06-16 17:14:57 +01:00
clutter-shader-types.h
clutter-shader.c shader: Don't notify properties when finalizing shaders 2011-01-11 11:20:16 +00:00
clutter-shader.h build: Re-arrange headers 2010-11-18 18:23:49 +00:00
clutter-snap-constraint.c Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-snap-constraint.h Appease the gods in introspection 2011-01-20 16:35:26 +00:00
clutter-stage-manager-private.h Add copyright notices 2010-10-21 13:13:00 +01:00
clutter-stage-manager.c Clean up clutter-private.h/2 2010-10-21 11:30:19 +01:00
clutter-stage-manager.h
clutter-stage-private.h Discard the current pick buffer... 2010-11-08 16:45:15 +00:00
clutter-stage-window.c stage-window: Add set_accept_focus() vfunc 2010-12-30 12:44:13 +00:00
clutter-stage-window.h stage-window: Add set_accept_focus() vfunc 2010-12-30 12:44:13 +00:00
clutter-stage.c stage: Do not create the default stage on stage.is_default() 2011-01-21 11:43:00 +00:00
clutter-stage.h stage: Add :accept-focus property and accessors 2010-12-30 12:44:13 +00:00
clutter-state.c state: Correct the documentation 2010-10-25 17:21:20 +01:00
clutter-state.h Use G_DEFINE_BOXED_TYPE for all boxed types 2010-10-18 11:26:45 +01:00
clutter-table-layout.c Plug a memory leak in clutter-table-layout 2010-10-08 12:11:39 +01:00
clutter-table-layout.h table-layout: Invert row/column in arguments 2010-09-23 15:17:58 +01:00
clutter-text.c introspection: Add missing (out) annotations for get_color() 2011-01-17 17:31:59 +00:00
clutter-text.h
clutter-texture.c build: Re-arrange headers 2010-11-18 18:23:49 +00:00
clutter-texture.h build: Re-arrange headers 2010-11-18 18:23:49 +00:00
clutter-timeline.c timeline: Check if the timeline is playing in do_tick 2011-01-18 16:23:50 +00:00
clutter-timeline.h timeline: Rename the reverse property to auto-reverse 2010-12-17 12:07:52 +00:00
clutter-timeout-interval.c Start using the monotonic API in GLib ≥ 2.27 2010-11-17 16:19:10 +00:00
clutter-timeout-interval.h Move away from GTimeVal 2010-11-17 16:19:10 +00:00
clutter-timeout-pool.c Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-timeout-pool.h Expose deprecated symbols whilst building Clutter 2011-01-20 13:29:37 +00:00
clutter-types.h build: Re-arrange headers 2010-11-18 18:23:49 +00:00
clutter-units.c docs: Documentation fixes 2010-12-09 13:59:08 +00:00
clutter-units.h introspection: Skip some C-only structures 2010-12-10 17:15:39 +00:00
clutter-util.c paint_volume: Splits out clutter_paint_volume code 2010-09-29 15:13:00 +01:00
clutter-util.h
clutter-version.h.in
clutter.h build: Generate an instealled config header 2011-01-19 14:33:27 +00:00
clutter.pc.in build: Start moving to a non-recursive layout 2010-09-29 14:40:15 +01:00
Makefile.am build: Generate an instealled config header 2011-01-19 14:33:27 +00:00