mutter/clutter
Neil Roberts 75f1dc90b0 cogl-material: Add support for setting the wrap mode for a layer
Previously, Cogl's texture coordinate system was effectively always
GL_REPEAT so that if an application specifies coordinates outside the
range 0→1 it would get repeated copies of the texture. It would
however change the mode to GL_CLAMP_TO_EDGE if all of the coordinates
are in the range 0→1 so that in the common case that the whole texture
is being drawn with linear filtering it will not blend in edge pixels
from the opposite sides.

This patch adds the option for applications to change the wrap mode
per layer. There are now three wrap modes: 'repeat', 'clamp-to-edge'
and 'automatic'. The automatic map mode is the default and it
implements the previous behaviour. The wrap mode can be changed for
the s and t coordinates independently. I've tried to make the
internals support setting the r coordinate but as we don't support 3D
textures yet I haven't exposed any public API for it.

The texture backends still have a set_wrap_mode virtual but this value
is intended to be transitory and it will be changed whenever the
material is flushed (although the backends are expected to cache it so
that it won't use too many GL calls). In my understanding this value
was always meant to be transitory and all primitives were meant to set
the value before drawing. However there were comments suggesting that
this is not the expected behaviour. In particular the vertex buffer
drawing code never set a wrap mode so it would end up with whatever
the texture was previously used for. These issues are now fixed
because the material will always set the wrap modes.

There is code to manually implement clamp-to-edge for textures that
can't be hardware repeated. However this doesn't fully work because it
relies on being able to draw the stretched parts using quads with the
same values for tx1 and tx2. The texture iteration code doesn't
support this so it breaks. This is a separate bug and it isn't
trivially solved.

When flushing a material there are now extra options to set wrap mode
overrides. The overrides are an array of values for each layer that
specifies an override for the s, t or r coordinates. The primitives
use this to implement the automatic wrap mode. cogl_polygon also uses
it to set GL_CLAMP_TO_BORDER mode for its trick to render sliced
textures. Although this code has been added it looks like the sliced
trick has been broken for a while and I haven't attempted to fix it
here.

I've added a constant to represent the maximum number of layers that a
material supports so that I can size the overrides array. I've set it
to 32 because as far as I can tell we have that limit imposed anyway
because the other flush options use a guint32 to store a flag about
each layer. The overrides array ends up adding 32 bytes to each flush
options struct which may be a concern.

http://bugzilla.openedhand.com/show_bug.cgi?id=2063
2010-04-12 15:44:23 +01:00
..
cogl cogl-material: Add support for setting the wrap mode for a layer 2010-04-12 15:44:23 +01:00
eglnative eglnative: Connect StageWindow.show and .hide 2010-03-05 08:48:52 +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 Make sure GLX_SGI_swap_control is set up correctly 2010-03-22 11:23:55 +00:00
json json: Update JsonParser 2010-03-19 11:13:04 +00:00
osx Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
win32 win32: Use GCLP_* instead of GCL_* when calling GetClassLongPtr 2010-04-09 15:43:42 +01:00
x11 x11: Use has_allocation() in TfP actor 2010-03-26 00:46:43 +00:00
clutter-actor.c actor: Flag the color argument of the ::pick signal as being constant 2010-04-12 12:48:46 +01:00
clutter-actor.h actor: Add has_allocation() method 2010-03-26 00:46:31 +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
clutter-animator.c animator: compare floating point values with an epsilon 2010-03-03 15:53:07 +00:00
clutter-animator.h animator: s/clutter_animator_run/clutter_animator_start/ 2010-03-02 17:03:03 +00:00
clutter-backend.c Add error reporting for create_context() failures 2010-03-17 17:40:34 +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
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
clutter-binding-pool.c
clutter-binding-pool.h
clutter-box-layout.c Add "homogeneous" mode to ClutterBoxLayout. 2010-03-25 09:41:54 +00:00
clutter-box-layout.h Add "homogeneous" mode to ClutterBoxLayout. 2010-03-25 09:41:54 +00:00
clutter-box.c box: Fix allow-none annotation 2010-03-03 10:47:42 +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
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 Emit a critical warning if features are not initialized 2010-03-18 14:15:33 +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
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
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
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
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 Add error reporting for create_context() failures 2010-03-17 17:40:34 +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 model: Let get_n_columns() return a sane value 2010-03-17 17:14:08 +00:00
clutter-model.h
clutter-path.c docs: Use % for defines not # 2010-02-04 21:10:02 +00:00
clutter-path.h
clutter-private.h Add error reporting for create_context() failures 2010-03-17 17:40:34 +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 [docs] Bring down the undocumented symbols to 2% 2009-03-16 15:00:55 +00:00
clutter-script-parser.c script: Add more comments and annotations 2010-03-18 20:20:09 +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: Fix gtk-doc annotation for ClutterStageManageClass 2010-03-03 10:49:34 +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 Fix errors in keeping track of the stage bounding rectangle 2010-03-19 10:29:53 +00:00
clutter-units.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-units.h
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