Robert Bragg [Thu, 8 Apr 2010 13:37:01 +0000 (14:37 +0100)]
cogl: renames cogl_multiply_matrix to cogl_transform
Although cogl_multiply_matrix was consistent with OpenGL, after further
consideration it was agreed that cogl_transform is a better name. Given
that it's in the global cogl_ namespace cogl_transform seems more self
documenting.
Robert Bragg [Thu, 1 Apr 2010 12:15:12 +0000 (13:15 +0100)]
docs: This improves the documentation for cogl_push_framebuffer
This adds an example of how to setup a Clutter style 2D coordinate space
and clarifies what state is owned by a framebuffer. (projection,
modelview, viewport and clip stack)
When we expose more cogl_framebuffer API this example will hopefully be
migrated into a more extensive introduction to using framebuffers.
Robert Bragg [Wed, 3 Mar 2010 16:37:59 +0000 (16:37 +0000)]
test-cogl-offscreen: Setup a clutter style modelview/projection
This updates test-cogl-offscreen to give an example of setting up a
CoglFramebuffer with a Clutter style 2D coordinate system with (0,0) top
left and (framebuffer_width, framebuffer_height) bottom right.
Robert Bragg [Fri, 19 Mar 2010 09:55:30 +0000 (09:55 +0000)]
cogl: move cogl_set_source* funcs into cogl.c
Previously cogl_set_source and cogl_set_source_texture were in
cogl-material.c and the cogl_set_source_color* funcs were in
cogl-color.c. Originally this was because cogl.c was duplicated between
the GL and GLES backends and we didn't want to add to the amount of
duplicated code, but these files have since been consolidated into one
cogl.c.
Robert Bragg [Fri, 19 Mar 2010 09:30:59 +0000 (09:30 +0000)]
cogl: adds convenience cogl_multiply_matrix function
Quite often it's desirable to be able to multiply the current modelview
matrix by an arbitrary matrix. Currently though you have to first
explicitly call cogl_get_modelview_matrix to get the current modelview
into a temporary variable, then you need to multiply it with your matrix
using cogl_matrix_multiply and finally use cogl_set_modelview_matrix to
make the result be the new modelview. This new convenience function lets
more efficiently skip the first get and last set steps.
Robert Bragg [Fri, 19 Mar 2010 09:16:08 +0000 (09:16 +0000)]
cogl: rename cogl_enable to _cogl_enable
Every now and then someone sees the cogl_enable API and gets confused,
thinking its public API so this renames the symbol to be clear that it's
is an internal only API.
Neil Roberts [Wed, 31 Mar 2010 18:03:02 +0000 (19:03 +0100)]
test-cogl-tex-polygon: Actually use the material it creates
test-cogl-tex-polygon creates a separate material so that it can set
the texture filters. However in the paint functions that use
cogl_polygon it was calling cogl_set_source_texture which replaces the
material and ends up always using GL_LINEAR. This patch makes the
paint functions assume the correct source is set up instead of trying
to select a new source.
Emmanuele Bassi [Wed, 31 Mar 2010 14:14:09 +0000 (15:14 +0100)]
Add jhbuild moduleset
Clutter should provide a moduleset for JHBuild, to allow building the
whole Clutter stack within a separate prefix.
Owen W. Taylor [Fri, 26 Mar 2010 00:41:46 +0000 (00:41 +0000)]
x11: Use has_allocation() in TfP actor
ClutterX11TexturePixmap calls get_allocation_box() when queueing a
clipped redraw. If the allocation is not valid, and if we queue a
lot of redraws in response to a series of damage events, the net
result is that we spend all our time in a re-layout. We can
short-circuit this by checking if the actor has a valid allocation, and
if not, just queue a redraw - the actor will be allocated by the time it
is going to be painted.
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
Owen W. Taylor [Fri, 26 Mar 2010 00:35:36 +0000 (00:35 +0000)]
actor: Add has_allocation() method
Add clutter_actor_has_allocation(), a method meant to be used when
deciding whether to call clutter_actor_get_allocation_box() or any
of its wrappers.
The get_allocation_box() method will, in case the allocation is invalid,
perform a costly re-allocation cycle to ensure that the returned box
is valid. The has_allocation() method is meant to be used if we have an
actor calling get_allocation_box() from outside the place where the
allocation is always guaranteed to be valid.
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
Emmanuele Bassi [Thu, 25 Mar 2010 09:45:59 +0000 (09:45 +0000)]
docs: Add 1.4 index to the API references
Now that master has branched for the 1.3 development cycle.
José Dapena Paz [Wed, 17 Mar 2010 15:16:09 +0000 (16:16 +0100)]
Add "homogeneous" mode to ClutterBoxLayout.
Added new "homogeneous" mode to ClutterBoxLayout, that makes layout children
get all the same size.
This is heavily inspired in the "homogeneous" attribute available in GtkBox,
but simplified as we don't have padding nor borders in box layout, only
spacing.
Also added to test-box-layout a key to set/unset homogeneous mode.
* Coding style fixes.
* Added proper test for homogeneous mode in box layout.
* Fix in homogeneous mode.
http://bugzilla.openedhand.com/show_bug.cgi?id=2034
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
Emmanuele Bassi [Thu, 25 Mar 2010 09:33:26 +0000 (09:33 +0000)]
Use begin/end macros in cogl-primitives.h
Protect the people using a C++ compiler from the dark abyss of C code.
http://bugzilla.openedhand.com/show_bug.cgi?id=2049
Neil Roberts [Wed, 24 Mar 2010 15:32:28 +0000 (15:32 +0000)]
clutter-actor: Rename y1 to y_1 to avoid a compiler warning
Somebody somewhere decided it would be ok to define 'y1' as a global
function in math.h thus condemning us to repeatedly making commits to
fix these obnoxious compiler warnings about aliasing.
Adel Gadllah [Sun, 21 Mar 2010 12:12:58 +0000 (13:12 +0100)]
Make sure GLX_SGI_swap_control is set up correctly
glXSwapIntervalSGI only affects buffer swaps to the
current GLX drawable.
That means that calling it once in clutter_backend_glx_get_features
isn't sufficent, so set it up in clutter_backend_glx_ensure_context to
make sure it affects buffer swaps for the current drawable.
http://bugzilla.openedhand.com/show_bug.cgi?id=2044
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
Owen W. Taylor [Fri, 19 Mar 2010 18:18:17 +0000 (18:18 +0000)]
glx: Clean up the clip area conditions
Move the size check after the NULL check, add the clip height into the
check logic and fix up the comment.
http://bugzilla.openedhand.com/show_bug.cgi?id=2040
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
Emmanuele Bassi [Fri, 19 Mar 2010 16:24:34 +0000 (16:24 +0000)]
script: Do not allocate memory when not needed
When printing out the property value during a ClutterScript debug run we
generate the value's content using g_strdup_value_contents() - though we
do it unconditionally. The contents might not be printed (they most
likely won't, actually) and will be freed afterwards. This is
unnecessary: we can allocate the contents string after checking if we're
going to print out the debug note, thus avoiding the whole
allocation/free cycle unless strictly needed.
Emmanuele Bassi [Fri, 19 Mar 2010 11:39:23 +0000 (11:39 +0000)]
glx: Do not access stage_clip without checking it
The stage_clip parameter for add_redraw_clip() can be NULL, so we need
to check before accessing its members.
Owen W. Taylor [Wed, 17 Mar 2010 00:38:53 +0000 (20:38 -0400)]
Switch texture units before calling _cogl_texture_set_filters()
When setting up the state for a layer, we need to switch texture
units before we do anything that might bind the texture, or
we'll bind the wrong texture to the previous unit.
http://bugzilla.openedhand.com/show_bug.cgi?id=2033
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
Emmanuele Bassi [Fri, 19 Mar 2010 11:13:04 +0000 (11:13 +0000)]
json: Update JsonParser
Add another fix from upstream, to clean up the code.
Emmanuele Bassi [Fri, 19 Mar 2010 10:40:12 +0000 (10:40 +0000)]
json: Update the internal copy of JsonGenerator
The JsonGenerator we have inside Clutter as a fallback for a missing
system copy of JSON-GLib is way out of date.
Owen W. Taylor [Thu, 18 Mar 2010 17:55:01 +0000 (13:55 -0400)]
Fix errors in keeping track of the stage bounding rectangle
* Add new clutter_geometry_union(), because writing union intersection
is harder than it looks. Fixes two problems with the inline code in
clutter_stage_glx_add_redraw_clip().
1) The ->x and ->y of were reassigned to before using them to
compute the new width and height.
2) since ClutterGeometry has unsigned width, x + width is unsigned,
and comparison goes wrong if either rectangle has a negative
x + width. (We fixed width for GdkRectangle to be signed for GTK+-2.0,
this is a potent source of bugs.)
* Use in clutter_stage_glx_add_redraw_clip()
* Account for the case where the incoming rectangle is empty, and don't
end up with the stage being entirely redrawn.
* Account for the case where the stage already has a degenerate
width and don't end up with redrawing only the new rectangle and not
the rest of the stage.
The better fix here for the second two problems is to stop using a 0
width to mean the entire stage, but this should work for now.
http://bugzilla.openedhand.com/show_bug.cgi?id=2040
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
Owen W. Taylor [Wed, 17 Mar 2010 19:39:55 +0000 (15:39 -0400)]
Set pixel store parameters before calling glGetTexImage
We need to set up the rowstride and alignment properly in
CoglTexture2D before reading texture data.
http://bugzilla.openedhand.com/show_bug.cgi?id=2036
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
Emmanuele Bassi [Thu, 18 Mar 2010 20:36:02 +0000 (20:36 +0000)]
build: Mark --with-json=internal as experimental
The system JSON-GLib installation should be the preferred way of parsing
JSON in Clutter. The internal copy is limited by re-synchronization from
upstream, and by the fact that upstream contains a fork of GScanner that
allows parsing escaped UTF-8. We should warn users compiling Clutter
with the internal copy, just like we warn about the internal image
backend.
Emmanuele Bassi [Thu, 18 Mar 2010 20:29:59 +0000 (20:29 +0000)]
docs: Update the README
Add a "requirements" section and detail all the build requirements for
Clutter, depending on the platform.
Emmanuele Bassi [Thu, 18 Mar 2010 20:27:18 +0000 (20:27 +0000)]
build: Require xcomposite
The X11TexturePixmap actor uses XComposite API directly, without guards.
It has been doing so for a while, against the fact that we do check for
the XComposite extension - but we don't depend on it. As soon as you try
building Clutter on X11 without the XComposite extension available all
hell breaks loose.
The obvious fix is to make Clutter depend on XComposite - basically
ratifying what's the current state of things.
Emmanuele Bassi [Thu, 18 Mar 2010 20:20:09 +0000 (20:20 +0000)]
script: Add more comments and annotations
Detail why we are adding a fake id, and under which circumstances that
happens. Also be more verbose with the debug annotations.
Emmanuele Bassi [Thu, 18 Mar 2010 17:44:14 +0000 (17:44 +0000)]
script: Skip empty nodes
If we get an empty node then we should skip it; this is really a
workaround for something that is broken in JSON-GLib or in our use
of JSON-GLib.
Emmanuele Bassi [Thu, 18 Mar 2010 14:15:33 +0000 (14:15 +0000)]
Emit a critical warning if features are not initialized
If you forgot to call clutter_init() then you currently end up with a
warning saying that the stage cannot be initialized because the backend
does not support multiple stages. Clearly not useful.
We can catch some of the missing initialization in the features API,
since we will likely end up asking for a feature at some point.
Emmanuele Bassi [Wed, 17 Mar 2010 17:41:52 +0000 (17:41 +0000)]
glx: Remove unnecessary call to create_stage()
If we are in the stage realization sequence we already have a GLX
context set in the backend; there is no need to call create_backend().
Emmanuele Bassi [Wed, 17 Mar 2010 17:28:20 +0000 (17:28 +0000)]
Add error reporting for create_context() failures
We kind of assume that stuff will break well before during the
ClutterBackend::create_context() implementation if we fail to create a
GL context. We do, however, have error reporting in place inside the
Backend API to catch those cases. Unfortunately, since we switched to
lazy initialization of the Stage, there can be a case of GL context
creation failure that still leads to a successful initialization - and a
segmentation fault later on. This is clearly Not Good™.
Let's try to catch a failure in all the places calling create_context()
and report back to the user the error in a meaningful way, before
crashing and burning.
Emmanuele Bassi [Wed, 17 Mar 2010 17:14:08 +0000 (17:14 +0000)]
model: Let get_n_columns() return a sane value
If you call get_n_columns() during the instance initialization phase but
before set_name()/set_types() have been called, you'll get a (guint) -1.
This is less than ideal.
If columns haven't been initialized we should just return 0, which was
the intent of the API since the beginning.
Based on a patch by: Bastian Winkler <buz@netbuz.org>
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
Emmanuele Bassi [Tue, 16 Mar 2010 18:57:28 +0000 (18:57 +0000)]
model: Add a comment on the n_columns field type
To avoid another bug report like:
http://bugzilla.openedhand.com/show_bug.cgi?id=2017
with a patch that gets applied without a proper review, resulting in a
bug like:
http://bugzilla.openedhand.com/show_bug.cgi?id=2032
I should probably add a comment on why on earth we're using an integer
as the n_columns member of the ClutterModelPrivate structure, and why it
is important that it is initialized as -1.
Emmanuele Bassi [Tue, 16 Mar 2010 18:53:24 +0000 (18:53 +0000)]
Revert "model: Use guint for the n_columns field"
The int storage, and the initial value of -1, is used as a guard when
subclassing ClutterListModel to allow the sub-class to call
clutter_model_set_names() and clutter_model_set_types().
This reverts commit
c274118a8f7ed18e5bc703e614a9ea0a7cdb553c.
Emmanuele Bassi [Tue, 16 Mar 2010 10:44:40 +0000 (10:44 +0000)]
Branch master for 1.3
Emmanuele Bassi [Mon, 15 Mar 2010 16:40:50 +0000 (16:40 +0000)]
Post-release version bump to 1.2.3
Emmanuele Bassi [Mon, 15 Mar 2010 16:25:46 +0000 (16:25 +0000)]
Release 1.2.2
Emmanuele Bassi [Mon, 15 Mar 2010 16:04:34 +0000 (16:04 +0000)]
Update NEWS file
Colin Walters [Fri, 12 Mar 2010 22:39:27 +0000 (17:39 -0500)]
Return and warn if a handle's refcount is <= 0
This makes it more likely consumers notice invalid unreferences.
GObject has the same assertion.
http://bugzilla.openedhand.com/show_bug.cgi?id=2029
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
Bastian Winkler [Tue, 2 Mar 2010 08:26:57 +0000 (09:26 +0100)]
model: Use guint for the n_columns field
clutter_model_get_n_columns is supposed to return a guint, so the
n_columns field needs to be a guint with the initial value set to 0.
http://bugzilla.openedhand.com/show_bug.cgi?id=2017
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
Neil Roberts [Wed, 10 Mar 2010 00:37:52 +0000 (16:37 -0800)]
cogl-texture-2d: Determine format before checking texture support
When entering cogl_texture_2d_new_from_bitmap the internal format can
be COGL_PIXEL_FORMAT_ANY. This was causing _cogl_texture_2d_can_create
to use an invalid GL format type. Mesa apparently ignores this but it
was causing errors when Cogl is compiled with debugging under NVidia.
http://bugzilla.openedhand.com/show_bug.cgi?id=2026
Owen W. Taylor [Mon, 1 Mar 2010 21:49:04 +0000 (16:49 -0500)]
Fix checks for out-of-bounds coordinates and repeats
Add a return result from CoglTexture.transform_quad_coords_to_gl(),
so that we can properly determine the nature of repeats in
the face of GL_TEXTURE_RECTANGLE_ARB, where the returned
coordinates are not normalized.
The comment "We also work out whether any of the texture
coordinates are outside the range [0.0,1.0]. We need to do
this after calling transform_coords_to_gl in case the texture
backend is munging the coordinates (such as in the sub texture
backend)." is disregarded and removed, since it's actually
the virtual coordinates that determine whether we repeat,
not the GL coordinates.
Warnings about disregarded layers are used in all cases where
applicable, including for subtextures.
http://bugzilla.openedhand.com/show_bug.cgi?id=2016
Signed-off-by: Neil Roberts <neil@linux.intel.com>
Emmanuele Bassi [Wed, 10 Mar 2010 00:25:26 +0000 (00:25 +0000)]
test-paint-wrapper: Request ARGB visuals on GLX
If we are on GLX we have to request ARGB visuals, otherwise Clutter will
not do it by itself.
José Dapena Paz [Mon, 8 Mar 2010 14:37:36 +0000 (15:37 +0100)]
Fix argb initialisation.
Fix clutter initialisation if argb visuals are enabled, setting a border
color on creating the dummy window. This should avoid BadMatch happening
when the depth of the root window visual is not the same of the depth
of the argb visual.
http://bugzilla.openedhand.com/show_bug.cgi?id=2011
Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
Emmanuele Bassi [Sun, 7 Mar 2010 23:46:59 +0000 (23:46 +0000)]
actor: Remove some double indirection
Use an intermediate variable to avoid a double indirection when accessing
the instance private data structure.
Emmanuele Bassi [Sun, 7 Mar 2010 20:54:33 +0000 (20:54 +0000)]
json: Improve strictness of the JSON parser
Backport of the upstream JSON-GLib commit that improved the strictness
of JsonParser.
The original upstream commit is:
29881f03468db08bfb404cfcd5b61b4cdc419a87
Emmanuele Bassi [Fri, 5 Mar 2010 11:39:32 +0000 (11:39 +0000)]
Add test-cogl-texture-rectangle to the ignore file
Emmanuele Bassi [Fri, 5 Mar 2010 08:48:52 +0000 (08:48 +0000)]
eglnative: Connect StageWindow.show and .hide
The show() and hide() methods of the StageWindow interface are
implemented but not assigned when initializing the interface
vtable.
Emmanuele Bassi [Wed, 3 Mar 2010 18:17:15 +0000 (18:17 +0000)]
docs: Update the HACKING.backends file
The create_context() and ensure_context() sections should be more clear
on the role of the functions, and their eventual caveats, like being
called multiple times.
Neil Roberts [Tue, 2 Mar 2010 15:18:00 +0000 (15:18 +0000)]
Add a conformance test for rectangle textures
The test creates a GL_TEXTURE_RECTANGLE_ARB texture using
cogl_texture_new_from_foreign and confirms that rendering it works
correctly. If the rectangle texture extension isn't available then
this test always succeeds.
http://bugzilla.openedhand.com/show_bug.cgi?id=2015
Owen W. Taylor [Mon, 1 Mar 2010 19:04:20 +0000 (14:04 -0500)]
CoglTexture2DSliced: Handle TEXTURE_RECTANGLE_ARB
In _cogl_texture_2d_sliced_foreach_sub_texture_in_region(), don't
assert that the target is GL_TEXTURE_2D; instead conditionalize
normalization on the target.
http://bugzilla.openedhand.com/show_bug.cgi?id=2015
Neil Roberts [Wed, 3 Mar 2010 18:08:33 +0000 (18:08 +0000)]
eglnative: Don't create a context if there already is one
If the EGL context is already created then we shouldn't try to create
another one. This was causing problems where one context would be
created from calling _clutter_feature_init and the other was created
from _clutter_backend_get_features. Cogl would set up its state using
the first context and then assume the state was still valid when the
second context became used so blending was not working correctly.
http://bugzilla.openedhand.com/show_bug.cgi?id=2020
Emmanuele Bassi [Wed, 3 Mar 2010 17:46:53 +0000 (17:46 +0000)]
x11-texture-pixmap: Move signal handler override
The signal handling override for the ::queue-damage-redraw should be
done in the class initialization function, not in the instance one.
Emmanuele Bassi [Wed, 3 Mar 2010 17:02:51 +0000 (17:02 +0000)]
Update stb_image.c
Upstream "released" 1.18.
Øyvind Kolås [Wed, 3 Mar 2010 15:45:43 +0000 (15:45 +0000)]
animator: compare floating point values with an epsilon
Direct comparisons with doubles are error prone.
Øyvind Kolås [Wed, 3 Mar 2010 15:46:19 +0000 (15:46 +0000)]
animator: fix a crash in clutter_animator_compute_value
Fix a crasher when there is only one key in the animator.
Emmanuele Bassi [Wed, 3 Mar 2010 15:31:01 +0000 (15:31 +0000)]
eglnative: Compilation fixes
We should include <errno.h>, if we plan to use errno.
Why, yes: I am that stupid.
Emmanuele Bassi [Wed, 3 Mar 2010 10:49:34 +0000 (10:49 +0000)]
docs: Fix gtk-doc annotation for ClutterStageManageClass
Remove the semi-colon and use a colon for declaring the type.
Emmanuele Bassi [Wed, 3 Mar 2010 10:47:42 +0000 (10:47 +0000)]
box: Fix allow-none annotation
The syntax for allowing NULL is "allow-none", not "allow none".
Emmanuele Bassi [Tue, 2 Mar 2010 19:41:44 +0000 (19:41 +0000)]
Post-release version bump to 1.2.1
Emmanuele Bassi [Tue, 2 Mar 2010 18:03:23 +0000 (18:03 +0000)]
Release 1.2.0 (stable)
Emmanuele Bassi [Tue, 2 Mar 2010 18:03:13 +0000 (18:03 +0000)]
Update the NEWS file
Emmanuele Bassi [Tue, 2 Mar 2010 19:17:28 +0000 (19:17 +0000)]
build: Include test-script-model.json
The Model conformance test for ClutterScript parsing requires the file
to be inside the dist.
Emmanuele Bassi [Tue, 2 Mar 2010 19:29:22 +0000 (19:29 +0000)]
build: Add test-animator-3.json to EXTRA_DIST
Emmanuele Bassi [Tue, 2 Mar 2010 19:09:20 +0000 (19:09 +0000)]
conformance: Use g_assert_no_error() if available
GLib 2.20 has a nice g_assert() wrapper which will print out the GError
if it's not NULL.
Neil Roberts [Tue, 2 Mar 2010 18:30:31 +0000 (18:30 +0000)]
clutter-actor: Initialize with the identity matrix in get_transform
The documentation and name of the get_transformation_matrix function
implies that 'matrix' is purely an out parameter. However it wasn't
initializing the matrix before calling the 'apply_transform' virtual
so it was basically just a wrapper for the virtual. The virtual
assumes the matrix parameter is in/out and applies the actor's
transformation on top of any existing transformations. This causes
unexpected semantics that are inconsistent with the documentation.
Emmanuele Bassi [Tue, 2 Mar 2010 17:47:13 +0000 (17:47 +0000)]
text-field: Cast GString->len to integer before printing
The compiler will warn on 64bit architectures when using %d for
printing a gsize field.
http://bugzilla.openedhand.com/show_bug.cgi?id=2019
Robert Bragg [Tue, 2 Mar 2010 14:04:54 +0000 (14:04 +0000)]
glx tfp: make clutter_glx_texture_pixmap_update_area cheap
This changes clutter_glx_texture_pixmap_update_area so it defers the
call to glXBindTexImageEXT until our pre "paint" signal handler which
makes clutter_glx_texture_pixmap_update_area cheap to call.
The hope is that mutter can switch to reporting raw damage updates to
ClutterGLXTexturePixmap and we can use these to queue clipped redraws.
Robert Bragg [Mon, 30 Nov 2009 17:47:55 +0000 (17:47 +0000)]
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.
Øyvind Kolås [Tue, 2 Mar 2010 17:03:03 +0000 (17:03 +0000)]
animator: s/clutter_animator_run/clutter_animator_start/
This is consistent with choice of words in clutter_timeline_start and
makes the API less surprising.
Robert Bragg [Tue, 2 Mar 2010 02:07:40 +0000 (02:07 +0000)]
cogl debug: Adds missing guards around debug cogl_args[]
commit
511e5ceb516dc accidentally removed the #ifdef COGL_ENABLE_DEBUG
guards around the "cogl-debug" and "cogl-no-debug" cogl_args[] which
this patch restores.
Emmanuele Bassi [Tue, 2 Mar 2010 15:08:01 +0000 (15:08 +0000)]
flow-layout: Provide a preferred size
The FlowLayout fails to provide a preferred size in case no sizing is
specified on one axis. It should, instead, have the preferred size of
the sum of its children, depending on the orientation property.
http://bugzilla.openedhand.com/show_bug.cgi?id=2013
Emmanuele Bassi [Tue, 2 Mar 2010 13:32:46 +0000 (13:32 +0000)]
build: Require libtool >= 2.2.6
Update the configure.ac to use the LT_INIT() instead of the deprecated
AC_PROG_LIBTOOL. This also allows us to depend on a specific libtool
version, namely one that doesn't thoroughly suck.
Øyvind Kolås [Tue, 2 Mar 2010 12:38:51 +0000 (12:38 +0000)]
animator: restore accidentally removed break
In
505e5966 a break statement was removed by accident, causing the
animator to enter infinite loops if no initial key is present.
Emmanuele Bassi [Tue, 2 Mar 2010 12:25:45 +0000 (12:25 +0000)]
Merge branch 'eglnative-update'
* eglnative-update:
eglnative: Add CLUTTER_FB_DEVICE
eglnative: Update implementation
Emmanuele Bassi [Mon, 1 Mar 2010 11:38:41 +0000 (11:38 +0000)]
eglnative: Add CLUTTER_FB_DEVICE
Some EGL drivers for embedded devices require a specific framebuffer
device to be opened and passed to eglCreateWindowSurface(). Since it's
optional, we can provide an environment variabled called
CLUTTER_FB_DEVICE that can be used to specify the path of the device
to be opened.
http://bugzilla.openedhand.com/show_bug.cgi?id=1997
Emmanuele Bassi [Sat, 27 Feb 2010 09:42:42 +0000 (09:42 +0000)]
eglnative: Update implementation
Update the EGL native framebuffer backend to be 1.2-ready:
» create the EGL context and the surface inside the create_context()
implementation so that a context is always available
» simplify the StageWindow implementation
» clean up old code
http://bugzilla.openedhand.com/show_bug.cgi?id=1997
Owen W. Taylor [Mon, 1 Mar 2010 18:54:03 +0000 (13:54 -0500)]
Fall back in _cogl_texture_2d_new_from_bitmap()
Just like _cogl_texture_2d_new_with_size(),
_cogl_texture_2d_new_from_bitmap() needs to check if an unsliced
texture can be created at the given size, or if hardware
limitations prevent this.
http://bugzilla.openedhand.com/show_bug.cgi?id=2014
Signed-off-by: Neil Roberts <neil@linux.intel.com>
Emmanuele Bassi [Tue, 2 Mar 2010 09:53:55 +0000 (09:53 +0000)]
docs: Documentation fixes
Let's see if we can get a 100% coverage for Clutter too.
Neil Roberts [Mon, 1 Mar 2010 18:08:41 +0000 (18:08 +0000)]
cogl: Support any format in cogl_read_pixels
cogl_read_pixels() no longer asserts that the format passed in is
RGBA_8888 but instead accepts any format. The appropriate GL enums for
the format are passed to glReadPixels so OpenGL should be perform a
conversion if neccessary.
It currently assumes glReadPixels will always give us premultiplied
data. This will usually be correct because the result of the default
blending operations for Cogl ends up with premultiplied data in the
framebuffer. However it is possible for the framebuffer to be in
whatever format depending on what CoglMaterial is used to render to
it. Eventually we may want to add a way for an application to inform
Cogl that the framebuffer is not premultiplied in case it is being
used for some special purpose.
If the requested format is not premultiplied then Cogl will convert
it. The tests have been changed to read the data as premultiplied so
that they won't be affected by the conversion. Picking in Clutter has
been changed to use COGL_PIXEL_FORMAT_RGB_888 because it doesn't need
the alpha component. clutter_stage_read_pixels is left unchanged
because the application can't specify a format for that so it seems to
make most sense to store unpremultiplied values.
http://bugzilla.openedhand.com/show_bug.cgi?id=1959
Øyvind Kolås [Mon, 1 Mar 2010 18:35:01 +0000 (18:35 +0000)]
Do not overwrite the initial key, making ease-in work as expected.
Fixes bug #2008, where a property with ease-in would jump instead of
start at the properties initial value.
Bastian Winkler [Mon, 1 Mar 2010 16:00:41 +0000 (17:00 +0100)]
animator: Remove redundant declaration in header file
clutter_animator_property_set_interpolation was declared twice in
clutter-animator.h
http://bugzilla.openedhand.com/show_bug.cgi?id=2012
Emmanuele Bassi [Mon, 1 Mar 2010 17:47:52 +0000 (17:47 +0000)]
docs: Add Animator.compute_value()
The clutter_animator_compute_value() has been added to the API, but it
is missing from the API reference.
Emmanuele Bassi [Mon, 1 Mar 2010 17:45:00 +0000 (17:45 +0000)]
docs: Fix syntax error in Model's documentation
A missing opening quote sign is breaking gtk-doc for ClutterModel.
Emmanuele Bassi [Mon, 1 Mar 2010 15:37:12 +0000 (15:37 +0000)]
Merge branch 'stage-min-size-rework'
* stage-min-size-rework:
docs: Update minimum size accessors
actor: Use the TOPLEVEL flag instead of a type check
[stage] Use min-width/height props for min size
Robert Bragg [Fri, 26 Feb 2010 09:44:29 +0000 (09:44 +0000)]
profile: avoid segfault generating reports with no stats
The clutter-profile.c print_report() code would crash if no stats had
been gathered because uprof would return NULL for the "Redrawing" timer
which we then dereferenced.
This changes the code to start by checking for the "Mainloop",
"Redrawing" and "Do Pick" timers and if none are present it returns
immediately without generating any report.
Robert Bragg [Fri, 26 Feb 2010 09:48:43 +0000 (09:48 +0000)]
build: Fixes out of tree builds
When building the gobject introspection data the build wasn't able to
find clutter/clutter-json.h so this adds $(top_builddir) to INCLUDES.
Emmanuele Bassi [Mon, 1 Mar 2010 12:56:10 +0000 (12:56 +0000)]
Remove mentions of the FSF address
Since using addresses that might change is something that finally
the FSF acknowledge as a plausible scenario (after changing address
twice), the license blurb in the source files should use the URI
for getting the license in case the library did not come with it.
Not that URIs cannot possibly change, but at least it's easier to
set up a redirection at the same place.
As a side note: this commit closes the oldes bug in Clutter's bug
report tool.
http://bugzilla.openedhand.com/show_bug.cgi?id=521
Emmanuele Bassi [Mon, 1 Mar 2010 11:12:16 +0000 (11:12 +0000)]
build: Remove unused checks on platform functions
There is no need for us to check for low-level functions and header
files, especially since we haven't been checking the results until
now. This makes cross-compiling slightly more bearable.
Emmanuele Bassi [Sun, 28 Feb 2010 10:59:29 +0000 (10:59 +0000)]
actor: Call unparent() in destroy
If the actor is an internal child of another actor then we should call
unparent() when destroying it, like clutter_actor_reparent() does;
otherwise we'll leak the actor, since the parent holds a reference to
it.
http://bugzilla.openedhand.com/show_bug.cgi?id=2009
Emmanuele Bassi [Sat, 27 Feb 2010 18:56:34 +0000 (18:56 +0000)]
docs: Update minimum size accessors
Expand the documentation for set_minimum_size() and get_minimum_size(),
and add introspection annotations for get_minimum_size().
Emmanuele Bassi [Sat, 27 Feb 2010 18:24:17 +0000 (18:24 +0000)]
actor: Use the TOPLEVEL flag instead of a type check
We can use the internal private CLUTTER_ACTOR_IS_TOPLEVEL flag, which is
set only on Stages.
Chris Lord [Fri, 26 Feb 2010 18:36:38 +0000 (18:36 +0000)]
[stage] Use min-width/height props for min size
Instead of shadowing these properties with different properties with the
same names on stage, actually use them. Behaviour should be identical,
except the minimum stage size can now be enforced by setting the
min-width/height properties as well as using the set_minimum_size
function.
Emmanuele Bassi [Fri, 26 Feb 2010 16:43:02 +0000 (16:43 +0000)]
docs: Update --enable-cogl-debug description
The 'no' value is not the default any more. The 'minimum' value is
always the default, regardless of the release status.
Emmanuele Bassi [Fri, 26 Feb 2010 15:12:27 +0000 (15:12 +0000)]
docs: Unicode-ify NEWS
Emmanuele Bassi [Fri, 26 Feb 2010 15:00:47 +0000 (15:00 +0000)]
build: More options for Automake
Require automake >= 1.10, and add the following options:
» dist-bzip2: create a bz2 tarball in the dist process
» check-news: check that we changed the NEWS file prior to dist,
to avoid another release without NEWS updates, like 1.1.10
Emmanuele Bassi [Fri, 26 Feb 2010 10:36:17 +0000 (10:36 +0000)]
device: When changing the stage, unset the pointer actor
If we do not unset the Stage we will have stale data, and the Crossing
event when re-entering a Stage will not be emitted, as the actor under
the pointer might be the same as before.
Neil Roberts [Tue, 23 Feb 2010 14:45:44 +0000 (14:45 +0000)]
cogl-vertex-buffer: Add support for unsigned int indices
This adds a COGL_INDICES_TYPE_UNSIGNED_INT enum value so that unsigned
ints can be used with cogl_vertex_buffer_indices_new. Unsigned ints
are not supported in core on GLES so a feature flag has also been
added to advertise this. GLES only sets the feature if the
GL_OES_element_index_uint extension is available. It is an error to
call indices_new() with unsigned ints unless the feature is
advertised.
http://bugzilla.openedhand.com/show_bug.cgi?id=1998
Emmanuele Bassi [Thu, 25 Feb 2010 23:23:53 +0000 (23:23 +0000)]
docs: Document the "columns" syntax for ClutterModel
Like we do for other classes implementing custom properties, we should
document the syntax of the "columns" scriptable property of ClutterModel.
Emmanuele Bassi [Thu, 25 Feb 2010 23:15:59 +0000 (23:15 +0000)]
conformance: Use g_test_verbose() for logging
Protect g_print() calls behind the g_test_verbose() check, to avoid
unwanted output during the conformance test run.