mutter/clutter
Robert Bragg c0d5af5de5 Adds initial clipped redraw support to Clutter
A new (internal only currently) API, _clutter_actor_queue_clipped_redraw
can be used to queue a redraw along with a clip rectangle in actor
coordinates. This clip rectangle propagates up to the stage and clutter
backend which may optionally use the information to optimize stage
redraws. The GLX backend in particular may scissor the next redraw to
the clip rectangle and use GLX_MESA_copy_sub_buffer to present the stage
subregion.

The intention is that any actors that can naturally determine the bounds
of updates should queue clipped redraws to reduce the cost of updating
small regions of the screen.

Notes:
» If GLX_MESA_copy_sub_buffer isn't available then the GLX backend
  ignores any clip rectangles.

» queuing multiple clipped redraws will result in the bounding box of
  each clip rectangle being used.

» If a clipped redraw has a height > 300 pixels then it's promoted into
  a full stage redraw, so that the GPU doesn't end up blocking too long
  waiting for the vsync to reach the optimal position to avoid tearing.

  » Note: no empirical data was used to come up with this threshold so
    we may need to tune this.

» Currently only ClutterX11TexturePixmap makes use of this new API. This
  is done via a new "queue-damage-redraw" signal that is emitted when
  the pixmap is updated. The default handler queues a clipped redraw
  with the assumption that the pixmap is being painted as a rectangle
  covering the actors transformed allocation. If you subclass
  ClutterX11TexturePixmap and change how it's painted you now also
  need to override the signal handler and queue your own redraw.

  Technically this is a semantic break, but it's assumed that no one
  is currently doing this.

This still leaves a few unsolved issues with regards to optimizing sub
stage redraws that need to be addressed in further work so this can only
be considered a stepping stone a this point:

» Because we have no reliable way to determine if the painting of any
  given actor is being modified any optimizations implemented using
  _clutter_actor_queue_redraw_with_clip must be overridable by a
  subclass, and technically must be opt-in for existing classes to avoid
  a change in semantics. E.g. consider that a user connects to the paint
  signal for ClutterTexture and paints a circle instead of a rectangle.
  In this case any original logic to queue clipped redraws would be
  incorrect.

» Currently only the implementation of an actor has enough information
  with which to queue clipped redraws. E.g. It is not possible for
  generic code in clutter-actor.c to queue a clipped redraw when hiding
  an actor because actors have no way to report a "paint box". (remember
  actors can draw outside their allocation and actors with depth may
  also be projected outside of their allocation)

  » The current plan is to add a actor_class->get_paint_cuboid()
    virtual so actors can report a bounding cube for everything they
    would draw in their current state and use that to queue clipped
    redraws against the stage by projecting the paint cube into stage
    coordinates.

» Our heuristics for promoting clipped redraws into full redraws to
  avoid blocking the GPU while we wait for the vsync need improving:

  » vsync issues aren't relevant for redirected/composited applications
    so they should use different heuristics. In this case we instead
    need to trade off the cost of blitting when using glXCopySubBuffer
    vs promoting to a full redraw and flipping instead.
2010-03-02 17:19:11 +00:00
..
cogl cogl debug: Adds missing guards around debug cogl_args[] 2010-03-02 16:15:39 +00:00
eglnative eglnative: Add CLUTTER_FB_DEVICE 2010-03-02 11:50:31 +00:00
eglx Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
fruity Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
glx Adds initial clipped redraw support to Clutter 2010-03-02 17:19:11 +00:00
json build: Use QUIET_GEN when building ClutterJson GIR 2009-10-18 17:11:42 +01:00
osx Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
win32 Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
x11 Adds initial clipped redraw support to Clutter 2010-03-02 17:19:11 +00:00
clutter-actor.c Adds initial clipped redraw support to Clutter 2010-03-02 17:19:11 +00:00
clutter-actor.h Adds initial clipped redraw support to Clutter 2010-03-02 17:19:11 +00:00
clutter-alpha.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-alpha.h
clutter-animatable.c
clutter-animatable.h docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-animation.c animation: Fix a typo 2010-02-25 12:01:03 +00:00
clutter-animation.h [animation] Add Animation::update() 2009-08-25 12:16:41 +01:00
clutter-animator.c animator: s/clutter_animator_run/clutter_animator_start/ 2010-03-02 17:03:03 +00:00
clutter-animator.h animator: s/clutter_animator_run/clutter_animator_start/ 2010-03-02 17:03:03 +00:00
clutter-backend.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-backend.h device: Impose per-backend DeviceManager 2010-02-17 17:46:48 +00:00
clutter-behaviour-depth.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-behaviour-depth.h
clutter-behaviour-ellipse.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-behaviour-ellipse.h
clutter-behaviour-opacity.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-behaviour-opacity.h
clutter-behaviour-path.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-behaviour-path.h docs: Fix the 'Since' annotation for some functions 2009-11-19 11:51:21 +00:00
clutter-behaviour-rotate.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-behaviour-rotate.h
clutter-behaviour-scale.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-behaviour-scale.h
clutter-behaviour.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-behaviour.h
clutter-bezier.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-bezier.h
clutter-bin-layout.c Fix some compiler warnings 2010-02-09 16:58:03 +00:00
clutter-bin-layout.h [layout, docs] Clean up BinLayout documentation 2009-10-14 11:31:29 +01:00
clutter-binding-pool.c Pass the interned string value to the binding callback 2009-11-17 21:32:17 +00:00
clutter-binding-pool.h
clutter-box-layout.c analysis: ClutterBoxLayout 2010-02-12 14:50:10 +00:00
clutter-box-layout.h box-layout: Add knobs for controlling animations 2009-12-13 01:15:02 +00:00
clutter-box.c docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-box.h docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-cairo-texture.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-cairo-texture.h Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-child-meta.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-child-meta.h
clutter-clone.c clone: Set :source as CONSTRUCT 2009-10-22 15:51:06 +01:00
clutter-clone.h
clutter-color.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-color.h
clutter-container.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-container.h docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-debug.h Adds initial clipped redraw support to Clutter 2010-03-02 17:19:11 +00:00
clutter-deprecated.h
clutter-device-manager.c device: Impose per-backend DeviceManager 2010-02-17 17:46:48 +00:00
clutter-device-manager.h docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-enum-types.c.in
clutter-enum-types.h.in
clutter-event.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-event.h device: Allow updating devices from embedding toolkits 2010-02-17 18:21:50 +00:00
clutter-feature.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-feature.h docs: Document SWAP_EVENTS feature flag 2010-02-15 19:03:37 +00:00
clutter-fixed-layout.c fixed layout: Store a back pointer to the Container 2010-02-24 12:25:53 +00:00
clutter-fixed-layout.h [layout, docs] Document FixedLayout 2009-10-14 11:31:29 +01:00
clutter-fixed.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-fixed.h
clutter-flow-layout.c flow-layout: Provide a preferred size 2010-03-02 15:11:27 +00:00
clutter-flow-layout.h [layout] Remove FlowLayout:wrap 2009-10-14 11:31:30 +01:00
clutter-frame-source.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-frame-source.h
clutter-group.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-group.h
clutter-id-pool.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-id-pool.h
clutter-input-device.c device: When changing the stage, unset the pointer actor 2010-02-26 11:19:26 +00:00
clutter-input-device.h device: Allow updating devices from embedding toolkits 2010-02-17 18:21:50 +00:00
clutter-interval.c Conditionally use G_VALUE_COLLECT_INIT() macro 2010-02-25 10:22:36 +00:00
clutter-interval.h
clutter-json.h.in [json] Include only json-glib.h 2009-08-12 15:31:16 +01:00
clutter-keysyms-table.h
clutter-keysyms.h Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-layout-manager.c Conditionally use G_VALUE_COLLECT_INIT() macro 2010-02-25 10:22:36 +00:00
clutter-layout-manager.h layout: Let begin_animation() return the Alpha 2009-12-13 01:23:54 +00:00
clutter-layout-meta.c [layout] Add LayoutMeta 2009-10-14 11:31:26 +01:00
clutter-layout-meta.h layout: Add padding to LayoutMeta 2009-12-02 11:36:25 +00:00
clutter-list-model.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-list-model.h
clutter-main.c Adds initial clipped redraw support to Clutter 2010-03-02 17:19:11 +00:00
clutter-main.h Remove clutter_set_default_text_direction() 2009-12-07 19:00:55 +00:00
clutter-marshal.list Add ClutterDeviceManager 2010-01-20 00:38:07 +00:00
clutter-master-clock.c stage: Add sanity checks for get_pending_swaps() 2010-02-15 12:04:50 +00:00
clutter-master-clock.h
clutter-media.c media: Add an API to specify which font should be used for subtitles 2010-01-11 13:04:16 +00:00
clutter-media.h docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-model-private.h
clutter-model.c docs: Fix syntax error in Model's documentation 2010-03-01 17:45:00 +00:00
clutter-model.h
clutter-path.c docs: Use % for defines not # 2010-02-04 21:10:02 +00:00
clutter-path.h [path] MOVE_TO and LINE_TO only use a pair of coordinates 2009-10-06 10:43:41 +01:00
clutter-private.h Adds initial clipped redraw support to Clutter 2010-03-02 17:19:11 +00:00
clutter-profile.c profile: avoid segfault generating reports with no stats 2010-03-01 15:25:45 +00:00
clutter-profile.h profiling: Allow limiting statisics just to picking 2010-01-08 20:19:50 +00:00
clutter-rectangle.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-rectangle.h
clutter-score.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-score.h
clutter-script-parser.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-script-private.h Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-script.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-script.h
clutter-scriptable.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-scriptable.h docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-shader-types.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-shader-types.h
clutter-shader.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-shader.h
clutter-stage-manager.c stage: Only clutter_stage_get_default() creates the default stage 2010-02-18 17:01:57 +00:00
clutter-stage-manager.h docs: Annotate StageManager 2009-12-02 11:38:04 +00:00
clutter-stage-window.c Adds initial clipped redraw support to Clutter 2010-03-02 17:19:11 +00:00
clutter-stage-window.h Adds initial clipped redraw support to Clutter 2010-03-02 17:19:11 +00:00
clutter-stage.c Adds initial clipped redraw support to Clutter 2010-03-02 17:19:11 +00:00
clutter-stage.h [stage] Add set/get_minumum_size 2010-02-06 11:23:37 +00:00
clutter-text.c analysis: ClutterText 2010-02-12 14:50:11 +00:00
clutter-text.h text: Add :font-description 2010-02-03 14:38:13 +00:00
clutter-texture.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-texture.h
clutter-timeline.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-timeline.h
clutter-timeout-interval.c Whitespace fixes 2010-02-01 10:40:34 +00:00
clutter-timeout-interval.h
clutter-timeout-pool.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-timeout-pool.h
clutter-types.h device: Allow updating devices from embedding toolkits 2010-02-17 18:21:50 +00:00
clutter-units.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-units.h units: Cache the pixels value inside Units 2009-10-16 15:25:37 +01:00
clutter-util.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-util.h Deprecate clutter_util_next_p2() 2010-02-06 10:49:33 +00:00
clutter-version.h.in docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter.h Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
Makefile.am build: Fixes out of tree builds 2010-03-01 15:25:45 +00:00