Emmanuele Bassi [Mon, 29 Nov 2010 11:19:16 +0000 (11:19 +0000)]
Update NEWS file
Emmanuele Bassi [Mon, 29 Nov 2010 10:59:16 +0000 (10:59 +0000)]
shader-effect: Remove unused function
The reset_uniforms() internal function is not used any more because the
CoglProgram cannot be reset post-creation - hence the uniforms cannot
change.
Neil Roberts [Sat, 27 Nov 2010 16:26:20 +0000 (16:26 +0000)]
ClutterShaderEffect: Don't throw away the program for a new actor
Previously when the shader effect is used with a new actor it would
end up throwing away the old program. I don't think this is neccessary
and it means if you use an effect to temporarily bind to an actor then
it will recompile the shader whenever it is applied.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2454
Neil Roberts [Sat, 27 Nov 2010 16:27:59 +0000 (16:27 +0000)]
ClutterOffscreenEffect: Don't throw away the material for a new actor
When a new actor is set for ClutterOffscreenEffect it would throw away
the old material. I don't think there is anything specifically tied to
the actor in the material so throwing away just loses Cogl's cached
state about the material. This ends up relinking the shader every time
a new actor is set in ClutterShaderEffect.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2454
Tomeu Vizoso [Sat, 27 Nov 2010 15:07:01 +0000 (16:07 +0100)]
Don't bail out from creating the FBO if we don't have it yet.
This happens when reattaching an effect to another actor.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2453
Tomeu Vizoso [Sat, 27 Nov 2010 15:04:50 +0000 (16:04 +0100)]
Set the signal handler to 0 when disconnecting it.
Otherwise we'll try to disconnect it again later.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2452
Emmanuele Bassi [Mon, 29 Nov 2010 08:55:13 +0000 (08:55 +0000)]
shader-effect: Zero out ShaderUniform
Do not use the compiler to zero the first field of the GValue member,
since it's apparently non-portable. As we're allocating memory anyway we
can let the slice allocator do the zero-ing for us.
Mentioned in: http://bugzilla.clutter-project.org/show_bug.cgi?id=2455
Neil Roberts [Fri, 26 Nov 2010 15:23:15 +0000 (15:23 +0000)]
cogl_pipeline_equal: Fix the comparison for layer texture equality
Before commit
49898d43 CoglPipeline would compare whether a pipeline
layer's texture is equal by fetching the underlying GL handle. I
changed that so that it would only compare the CoglHandles because
that commit removes the GL handle texture overrides and sliced
textures instead log the underlying primitive texture. However I
forgot that the primitives don't always use
_cogl_texture_foreach_sub_texture_in_region when the quad fits within
the single texture so it won't use a texture override. This meant that
atlas textures and sub textures get logged with the atlas handle so
the comparison still needs to be done using the GL handles. It might
be nice to add a CoglTexture virtual to get the underlying primitive
texture instead to avoid having the pipeline poke around with GL
handles.
Robert Bragg [Mon, 1 Nov 2010 13:53:16 +0000 (13:53 +0000)]
tests: Adds test-cogl-perf micro benchmark
This is mostly a stub, starting point for a one-stop Cogl
micro-benchmarking tool. The first test it adds is one that tries to
hammer the Cogl journal, but no doubt there are lots of other things we
should be regularly testing. Currently the aim is that the tool will be
able to also generate reports which we can collect to keep track of
performance changes over time.
Robert Bragg [Thu, 25 Nov 2010 20:12:36 +0000 (20:12 +0000)]
primitives: avoid leaking polygon override materials
If we have to make override changes to the user's source material to
handle cogl_polygon then we need to make sure we unref the override
material at the end.
Alexandre Quessy [Thu, 25 Nov 2010 18:13:51 +0000 (13:13 -0500)]
Fixed "the the" repetitions in some doc strings
http://bugzilla.clutter-project.org/show_bug.cgi?id=2450
Robert Bragg [Thu, 25 Nov 2010 13:19:59 +0000 (13:19 +0000)]
pipeline: Simplify layer change notifications to backend
Previously we used the layers->backend_priv[] members to determine when
to notify backends about layer changes, but it entirely up to the
backends if they want to associate private state with layers, even
though they may still be interested in layer change notifications (they
may associate layer related state with the owner pipeline).
We now make the observation that in
_cogl_pipeline_backend_layer_change_notify we should be able to assume
there can only be one backend currently associated with the layer
because we wouldn't allow changes to a layer with multiple dependants.
This means we can determine the backend to notify by looking at the
owner pipeline instead.
Neil Roberts [Thu, 25 Nov 2010 10:56:50 +0000 (10:56 +0000)]
clutter-offscreen-effect: Don't recreate the material when FBO changes
Previously whenever the size of the FBO changes it would create a new
material and attach the texture to it. This is not good for Cogl
because it throws away any cached state for the material. In
test-rotate the size of the FBO changes constantly so it effectively
uses a new material every paint. For shader effects this also ends up
relinking the shader every paint because the linked programs are part
of the material state.
Neil Roberts [Wed, 24 Nov 2010 18:37:47 +0000 (18:37 +0000)]
cogl-context: Get rid of the features_cached member
The features_cached member of CoglContext is intended to mark when
we've calculated the features so that we know if they are ready in
cogl_get_features. However we always intialize the features while
creating the context so features_cached will never be FALSE so it's
not useful. We also had the odd behaviour that the COGL_DEBUG feature
overrides were only applied in the first call to
cogl_get_features. However there are other functions that use the
feature flags such as cogl_features_available that don't use this
function so in some cases the feature flags will be interpreted before
the overrides are applied. This patch makes it always initialize the
features and apply the overrides immediately while creating the
context. This fixes a problem with COGL_DEBUG=disable-arbfp where the
first material flushed is done before any call to cogl_get_features so
it may still use ARBfp.
Neil Roberts [Wed, 24 Nov 2010 17:42:34 +0000 (17:42 +0000)]
Lower the priority of the GLSL pipeline backend
Now that the GLSL backend can generate code it can effectively handle
any pipeline unless there is an ARBfp program. However with current
open source GL drivers the ARBfp compiler is more stable so it makes
sense to prefer ARBfp when possible. The GLSL backend is also lower
than the fixed function backend on the assumption that any driver that
supports GLSL will also support ARBfp so it's quicker to try the fixed
function backend next.
Neil Roberts [Wed, 24 Nov 2010 17:29:00 +0000 (17:29 +0000)]
Add a COGL_DEBUG option to disable the fixed function pipeline backend
This adds COGL_DEBUG=disable-fixed to disable the fixed function
pipeline backend. This is needed to test the GLSL shader generation
because otherwise the fixed function backend would always override it.
Neil Roberts [Wed, 24 Nov 2010 17:33:07 +0000 (17:33 +0000)]
Don't use the fixed function backend if there is a user program
The fixed function pipeline backend can't handle a user program so it
should bail out if one is given.
Neil Roberts [Wed, 24 Nov 2010 17:37:55 +0000 (17:37 +0000)]
Add a warning message when no usable Cogl pipeline backend is found
If none of the pipeline backends can handle the state then it now
displays a warning so the developer has a chance to work out what's
going on.
Neil Roberts [Wed, 24 Nov 2010 15:30:56 +0000 (15:30 +0000)]
cogl-pipeline-glsl: Don't use gl_PointCoord on OpenGL
We don't want to use gl_PointCoord to implement point sprites on big
GL because in that case we already use glTexEnv(GL_COORD_REPLACE) to
replace the texture coords with the point sprite coords. Although GL
also supports the gl_PointCoord variable, it requires GLSL 1.2 which
would mean we would have to declare the GLSL version and check for
it. We continue to use gl_PointCoord for GLES2 because it has no
glTexEnv function.
Neil Roberts [Sat, 17 Jul 2010 13:11:02 +0000 (14:11 +0100)]
Add a conformance test that uses a vertex shader with no frag shader
This creates a material which users a layer to override the color of
the rectangle. A simple vertex shader is then created which just
emulates the fixed function pipeline. No fragment shader is
added. This demonstrates a bug where the layer state is getting
ignored when a vertex shader is in use.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2221
Neil Roberts [Tue, 23 Nov 2010 14:47:17 +0000 (14:47 +0000)]
Remove the fragment shader generation from the GLES2 wrapper
The GLES2 wrapper no longer needs to generate any fragment shader
state because the GLSL pipeline backend will always give the wrapper a
custom fragment shader. This simplifies a lot of the state comparison
done by the wrapper. The fog generation is also removed even though
it's actually part of the vertex shader because only the fixed
function pipeline backend actually calls the fog functions so it would
be disabled when using any of the other backends anyway. We can fix
this when the two shader backends also start generating vertex
shaders.
Neil Roberts [Tue, 23 Nov 2010 14:51:49 +0000 (14:51 +0000)]
Disable the fixed function backend for GLES2
GLES2 doesn't really support fixed function so if we disable it we can
remove the fixed function wrappers from the GLES2 Cogl backend.
Neil Roberts [Mon, 22 Nov 2010 18:33:49 +0000 (18:33 +0000)]
cogl-pipeline-glsl: Generate the alpha test snippet under GLES2
GLES2 has no glAlphaFunc function so we need to simulate the behaviour
in the fragment shader. The alpha test function is simulated with an
if-statement and a discard statement. The reference value is stored as
a uniform.
Neil Roberts [Mon, 22 Nov 2010 18:32:43 +0000 (18:32 +0000)]
cogl-pipeline: Add getters for the alpha test state
This adds two public functions:
cogl_pipeline_get_alpha_test_function
and
cogl_pipeline_get_alpha_test_reference.
Neil Roberts [Mon, 22 Nov 2010 18:29:50 +0000 (18:29 +0000)]
cogl: Separate out state flags for the alpha test func and ref
Previously the flag to mark the differences for the alpha test
function and reference value were conflated into one. However this is
awkward when generating shader code to simulate the alpha testing for
GLES 2 because in that case changing the function would need a
different program but changing the reference value just requires
updating a uniform. This patch makes the function and reference have
their own state flags.
Neil Roberts [Mon, 22 Nov 2010 16:44:11 +0000 (16:44 +0000)]
Remove the disabling of layer constants for GLES2
The GLSL shader generation supports layer combine constants so there's
no need to disable it for GLES2. It looks like there was also code for
it in the GLES2 wrapper so I'm not sure why it was disabled in the
first place.
Neil Roberts [Fri, 19 Nov 2010 10:44:27 +0000 (10:44 +0000)]
Generate GLSL in the CoglPipeline GLSL backend
The GLSL pipeline backend can now generate code to represent the
pipeline state in a similar way to the ARBfp backend. Most of the code
for this is taken from the GLES 2 wrapper.
Neil Roberts [Mon, 22 Nov 2010 12:15:35 +0000 (12:15 +0000)]
Move the cogl shader boilerplate setting code to a separate function
_cogl_shader_compile_real had some code to create a set of strings to
combine the boilerplate code with a shader before calling
glShaderSource. This has now been moved to its own internal function
so that it could be used from the GLSL pipeline backend as well.
Neil Roberts [Fri, 19 Nov 2010 15:42:26 +0000 (15:42 +0000)]
Move need_texture_combine_separate to cogl-pipeline
need_texture_combine_separate is moved to cogl-pipeline.c and renamed
to _cogl_pipeline_need_texture_combine_separate. The function is
needed by both the ARBfp and GLSL codegen backends so it makes sense to
share it.
Neil Roberts [Fri, 19 Nov 2010 10:43:52 +0000 (10:43 +0000)]
Move find_arbfp_authority to cogl-pipeline.c
The code for finding the arbfp authority for a pipeline should be the
same as finding the GLSL authority. So that the code can be shared the
function has been moved to cogl-pipeline.c and renamed to
_cogl_pipeline_find_codegen_authority.
Neil Roberts [Mon, 1 Nov 2010 17:25:26 +0000 (17:25 +0000)]
cogl: Rename arbfp_source_buffer to fragment_source_buffer
Only one of the material backends can be generating code at the same
time so it seems to make sense to share the same source buffer between
arbfp and glsl. The new name is fragment_source_buffer in case we
later want to create a new buffer for the vertex shader. That probably
couldn't share the same buffer because it will likely need to be
generated at the same time.
Evan Nemerson [Sat, 20 Nov 2010 07:27:46 +0000 (23:27 -0800)]
cogl: Include exported pacakges information in GIR
http://bugzilla.clutter-project.org/show_bug.cgi?id=2438
Chris Lord [Wed, 24 Nov 2010 16:34:21 +0000 (16:34 +0000)]
docs: Update documentation to reflect automatic map/unmap/etc.
Update the ClutterActor documentation to reflect the new automatic
map/unmap/realize/unrealize implementations.
Chris Lord [Tue, 26 Oct 2010 16:09:24 +0000 (17:09 +0100)]
actor: Use the internal child list for map/unmap
Use the internal child list for the default map/unmap vfuncs. This removes
the requirement for non-container composite actors to implement their own
map/unmap functions.
Robert Bragg [Wed, 20 Oct 2010 17:26:01 +0000 (18:26 +0100)]
actor: re-work unrealize to work with composite actors
Unrealizing an actor is a recursive process that needs to traverse the
children of an actor to ensure they are also unrealized. This maintains
the invariant that if any given actor is marked as unrealized then you
know that all its children have also been unrealized.
The previous implementation would use the container interface's
foreach_with_internals vfunc to explicitly traverse the children of
container actors but this didn't consider composite actors that aren't
containers.
Since clutter-actor now maintains an explicit list of children we can
also handle composite actors that aren't containers using
_clutter_actor_traverse.
Robert Bragg [Wed, 20 Oct 2010 14:40:30 +0000 (15:40 +0100)]
actor: make _clutter_actor_traverse more flexible
This makes it possible to choose the traversal order; either depth first
or breadth first and when visiting actors in a depth first order there
is now a callback called before children are traversed and one called
after. Some tasks such as unrealizing actors need to explicitly control
the traversal order to maintain the invariable that all children of an
actor are unrealized before we actually mark the parent as unrealized.
The callbacks are now passed the relative depth in the graph of the
actor being visited and instead of only being able to return a boolean
to bail out of further traversal it can now do one of: continue,
skip_children or break. To implement something like unrealize it's
desirable to skip children that you find have already been unrealized.
Owen W. Taylor [Tue, 5 Oct 2010 17:05:45 +0000 (13:05 -0400)]
ClutterX11TexturePixmap: Optimize ConfigureEvent handling
ClutterX11TexturePixmap watches for configure events to tell when it
needs to name a new pixmap for the window. However, ConfigureEvents
occur on moves in addition to resizes, and doing round trips and
naming new pixmaps every time a window is moved is a real performance
killer.
Add clutter_x11_texture_pixmap_sync_window_internal() that takes the
size/position of the window as arguments rather than always calling
XGetWindowAttributes. This allows us to bypass all work other than
notifying the window-x/window-y properties when we get a ConfigurEvent
for a move.
The last received width/height is saved to allow us to also omit
XGetWindowAttributes on MapNotify events.
The public clutter_x11_texture_pixmap_sync_window() becomes a bit less
efficient since we no longer combine the roundtrips for
XGetWindowAttributes() and XCompositeNameWindowPixmap(), but it appears
to have no callers in current publicly available code.
Several FIXME's are added for areas where there are still weird things
going on in the code or improvements could be made.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2356
Neil Roberts [Wed, 17 Nov 2010 17:31:23 +0000 (17:31 +0000)]
test-cogl-texture-get-set-data: Test the alpha component
Previously the alpha component of the test texture data was always set
to 255 and the data was read back as RGB so that the alpha component
is ignored. Now the alpha component is set to a generated value and
the data is read back a second time as RGBA to verify that Cogl is not
doing any premult conversions when the internal texture and target
data is the same.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2414
Owen W. Taylor [Fri, 12 Nov 2010 16:02:13 +0000 (11:02 -0500)]
Use FBOs and use cogl_read_pixels() to efficiently read partial textures
* cogl_texture_get_data() is converted to use
_cogl_texture_foreach_sub_texture_in_region() to iterate
through the underlying textures.
* When we need to read only a portion of the underlying
texture, we set up a FBO and use _cogl_read_pixels()
to read the portion we need. This is enormously more
efficient for reading a small portion of a large atlas
texture.
* The CoglAtlasTexture, CoglSubTexture, and CoglTexture2dSliced
implementation of get_texture() are removed.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2414
Neil Roberts [Wed, 17 Nov 2010 17:57:17 +0000 (17:57 +0000)]
cogl-framebuffer: Try to track format of the framebuffer
Previously in cogl_read_pixels we assume the format of the framebuffer
is always premultiplied because that is the most likely format with
the default Cogl blend mode. However when the framebuffer is bound to
a texture we should be able to make a better guess at the format
because we know the texture keeps track of the premult status. This
patch adds an internal format member to CoglFramebuffer. For onscreen
framebuffers we still assume it is RGBA_8888_PRE but for offscreen to
textures we copy the texture format. cogl_read_pixels uses this to
determine whether the data returned by glReadPixels will be
premultiplied.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2414
Neil Roberts [Wed, 17 Nov 2010 17:45:27 +0000 (17:45 +0000)]
cogl_read_pixels: Fix the format used in GLES2
When converting the data in cogl_read_pixels it was using bmp_format
instead of the format passed in to the function. bmp_format is the
same as the passed in format except that it always has the premult bit
set. Therefore the conversion would not handle premultiply correctly.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2414
Neil Roberts [Wed, 17 Nov 2010 15:38:20 +0000 (15:38 +0000)]
Add an internal _cogl_read_pixels_with_rowstride
This is the same as _cogl_read_pixels except that it takes a rowstride
parameter for the destination buffer. Under OpenGL setting the
rowstride this will end up calling GL_ROW_LENGTH so that the buffer
region can be directly written to. Under GLES GL_ROW_LENGTH is not
supported so it will use an intermediate buffer as it does if the
format is not GL_RGBA.
cogl_read_pixels now just calls the full version of the function with
the rowstride set to width*bpp.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2414
Neil Roberts [Thu, 11 Nov 2010 15:28:44 +0000 (15:28 +0000)]
Add an internal _cogl_offscreen_new_to_texture_full function
This function is the same as cogl_offscreen_new_to_texture but it
takes a level parameter and a set of flags so that FBOs can be used to
render to higher mipmap levels and to disable the depth and stencil
buffers. cogl_offscreen_new_to_texture now just calls the new function
with the level set to zero. This function could be useful in a few
places in Cogl where we want to use FBOs as an implementation detail
such as when copying between textures.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2414
Owen W. Taylor [Fri, 12 Nov 2010 15:58:59 +0000 (10:58 -0500)]
Test slicing when getting data in both directions
http://bugzilla.clutter-project.org/show_bug.cgi?id=2414
Robert Bragg [Tue, 23 Nov 2010 16:48:59 +0000 (16:48 +0000)]
stage: if backend _ignoring_redraw_clips queue full redraw
In clutter_stage_real_queue_redraw we were checking to see if the
backend will ignore any subsequent redraw_clip so we can avoid the cost
of projecting the paint-volume of an actor into stage coordinates, but
we weren't ensuring that a full redraw would be queued instead we just
bailed out immediately. This makes sure to call
_clutter_stage_window_add_redraw_clip (stage_window, NULL) in this case
to make sure the backend will do an un-clipped redraw.
Robert Bragg [Tue, 23 Nov 2010 16:05:44 +0000 (16:05 +0000)]
stage-window: tweak has_redraw_clips semantics
This tweaks the semantics of the has_redraw_clips vfunc so we can assume
that at the start of a new frame there is an implied, initial,
redraw_clip that clips everything (i.e. nothing would be redrawn) so in
that case we would expect the has_redraw_clips vfunc to return True at
the start of a new frame for backends that support clipping.
Previously there was an ambiguity when this function returned False
since it could either mean a full screen redraw had been queued or it
could mean that the clip state wasn't yet initialized for that frame.
This would result in _clutter_stage_has_full_redraw_queued() returning
True at the start of a new frame even before any actors have been
updated, which in turn meant we would incorrectly ignore queue_redraw
requests for actors, believing them to be redundant.
Emmanuele Bassi [Wed, 24 Nov 2010 12:02:38 +0000 (12:02 +0000)]
x11: Check for initialized context when enabling ARGB visuals
Instead of using the backend singleton. This allows lazy initialization
of Clutter.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2435
Tomeu Vizoso [Tue, 23 Nov 2010 16:06:52 +0000 (17:06 +0100)]
Fix API docs for ClutterShaderEffects
It can implement now both fragment and vertex shaders.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2442
Robert Bragg [Tue, 23 Nov 2010 14:31:45 +0000 (14:31 +0000)]
stage: Report an unknown paint volume.
Previously we were leaving it up to the default implementation of
get_paint_volume in ClutterGroup to handle the stage by determining the
bounding box of all contained children. This isn't the true bounding box
of the stage though since the stage is responsible for clearing the
entire framebuffer at the start of the frame. This adds a
get_paint_volume implementation for ClutterStage which simply returns
False which means Clutter has to assume it covers everything.
Robert Bragg [Tue, 23 Nov 2010 14:30:08 +0000 (14:30 +0000)]
x11: only queue clipped redraw for Expose
When we handle Expose events we try and queue a clipped redraw of the
stage, but for some reason we were also redundantly calling
clutter_actor_queue_redraw for the stage which would negate the request
to queue a clipped redraw.
Neil Roberts [Tue, 23 Nov 2010 14:07:16 +0000 (14:07 +0000)]
cogl-texture-driver-gles: Fix image height for uploading 3D textures
When uploading a 3D texture with an awkward rowstride, on GLES Cogl
will copy the images to an intermediate buffer to pass to GL. However
it was using the wrong height when copying the data so it would end up
overflowing the buffer and crashing.
Emmanuele Bassi [Tue, 23 Nov 2010 13:05:47 +0000 (13:05 +0000)]
pipeline: Use WrapModeInternal in the Layer struct
Since we're using CoglPipelineWrapModeInternal in the internal API
anyway, and the compiler complains loudly when comparing two enumeration
types without casting, the PipelineLayer struct should store the
wrap modes using the internal enumeration.
Owen W. Taylor [Sat, 13 Nov 2010 16:29:49 +0000 (11:29 -0500)]
Don't update or use last_paint_box when painting inside a clone
The last_paint_box for an actor represents its "normal" position - we
shouldn't update it or use it to cull drawing if we are painting
a clone of the actor. Tracking whether we are painting a clone is
done by adding _clutter_actor_push/pop_clone_paint() and a global
"clone paint level".
http://bugzilla.clutter-project.org/show_bug.cgi?id=2396
Robert Bragg [Mon, 22 Nov 2010 15:51:15 +0000 (15:51 +0000)]
clip-stack: combine modelview-projection in set_clip_planes
When using clip planes and we we have to project some vertices into
screen coordinates we used to transform those by the modelview and then
the projection matrix separately. Now we combine the modelview and
projection matrix and then use that to transform the vertices in one
step instead.
Robert Bragg [Mon, 22 Nov 2010 12:44:36 +0000 (12:44 +0000)]
journal: remove possability of fallback layers
When logging quads in the journal it used to be possible to specify a
mask of fallback layers (layers where a default white texture should be
used in-place of the corresponding texture in the current source
pipeline). Since we now handle fallbacks for cogl_rectangle* primitives
when validating the pipeline up-front before logging in the journal we
no longer need the ability for the journal to apply fallbacks too.
Robert Bragg [Fri, 12 Nov 2010 16:08:25 +0000 (16:08 +0000)]
use cogl_matrix_transform_points in clutter
When transforming a paint-volume or transforming allocation vertices we
are transforming more than one point at a time so we can batch those
together with cogl_matrix_transform_points instead of
cogl_matrix_transform_point. Also in both of these cases we don't need
to do a projective transform so using cogl_matrix_transform_points also
lets us reduce the per-vertex computation.
Robert Bragg [Fri, 12 Nov 2010 13:35:24 +0000 (13:35 +0000)]
matrix: Adds experimental cogl_matrix_{transform,project}_points
This add two new function that allows us to transform or project an
array of points instead of only transforming one point at a time. Recent
benchmarking has shown cogl_matrix_transform_point to be a bottleneck
sometimes, so this should allow us to reduce the overhead when
transforming lots of vertices at the same time, and also reduce the cost
of 3 component, non-projective transforms.
For now they are marked as experimental (you have to define
COGL_ENABLE_EXPERIMENTAL_API) because there is some concern that it
introduces some inconsistent naming. cogl_matrix_transform_point would
have to be renamed cogl_matrix_project_point to be consistent, but that
would be an API break.
Robert Bragg [Thu, 11 Nov 2010 16:28:45 +0000 (16:28 +0000)]
primitives: validate with _cogl_pipeline_foreach_layer
Switch _cogl_rectangles_with_multitexture_coords to using
_cogl_pipeline_foreach_layer to iterate the layers of a pipeline when
validating instead of iterating the pipelines internal list, which is
risky since any modifications to pipelines (even to an override pipeline
derived from the original), could potentially corrupt the list as it is
being iterated.
Robert Bragg [Thu, 11 Nov 2010 15:08:38 +0000 (15:08 +0000)]
cogl: remove WrapModeOverrides from FlushOptions
This removes the possibility to specify wrap mode overrides within a
CoglPipelineFlushOptions struct since the right way to handle these
overrides is by copying the user's material and making the changes to
that copy before flushing. All primitives code has already switched away
from using these wrap mode overrides so this patch just removes unused
code and types. It also remove the wrap_mode_overrides argument for
_cogl_journal_log_quad.
Emmanuele Bassi [Tue, 23 Nov 2010 10:26:15 +0000 (10:26 +0000)]
x11: Ignore NULL settings
Prevent a segfault when dealing with XSETTINGS_ACTION_DELETE.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2441
Emmanuele Bassi [Mon, 22 Nov 2010 17:01:17 +0000 (17:01 +0000)]
color: Do not shadow a variable
Avoid a warning.
Emmanuele Bassi [Mon, 22 Nov 2010 15:20:55 +0000 (15:20 +0000)]
Update NEWS
Emmanuele Bassi [Mon, 22 Nov 2010 15:07:01 +0000 (15:07 +0000)]
color: And finally, add hsla() support
Missed it when reading the CSS spec.
Emmanuele Bassi [Mon, 22 Nov 2010 15:02:47 +0000 (15:02 +0000)]
color: Support the CSS hsl() notation
Since we support the rgb() and rgba() notations we might as well also
support the hsl() one.
Emmanuele Bassi [Mon, 22 Nov 2010 14:22:56 +0000 (14:22 +0000)]
color: Support CSS color definitions
The CSS Color Module 3, available at:
http://www.w3.org/TR/css3-color/
allows defining colors as:
rgb ( r, g, b )
rgba ( r, g, b, a)
along with the usual hexadecimal and named notations.
The r, g, and b channels can be:
• integers between 0 and 255
• percentages, between 0% and 100%
The alpha channel, if included using the rgba() modifier, can be a
floating point value between 0.0 and 1.0.
The ClutterColor parser should support this notation.
Emmanuele Bassi [Mon, 22 Nov 2010 10:16:45 +0000 (10:16 +0000)]
docs: Update the release notes in the README
Also updates the introductory blurb.
Emmanuele Bassi [Sat, 20 Nov 2010 13:05:51 +0000 (13:05 +0000)]
docs: Include the Behaviour migration guide
I forgot to add the xinclude directive in the main document.
Emmanuele Bassi [Sat, 20 Nov 2010 11:07:45 +0000 (11:07 +0000)]
po: Post-release update
Emmanuele Bassi [Sat, 20 Nov 2010 11:07:29 +0000 (11:07 +0000)]
Post-release version bump to 1.5.7
Emmanuele Bassi [Sat, 20 Nov 2010 10:17:51 +0000 (10:17 +0000)]
Release Clutter 1.5.6 (snapshot)
Emmanuele Bassi [Sat, 20 Nov 2010 10:46:57 +0000 (10:46 +0000)]
build: Add missing cogl-shader-boilerplate.h
Emmanuele Bassi [Fri, 19 Nov 2010 18:29:43 +0000 (18:29 +0000)]
build: Add a missing file
Emmanuele Bassi [Fri, 19 Nov 2010 18:15:29 +0000 (18:15 +0000)]
build: Don't reference non-existing files
Emmanuele Bassi [Fri, 19 Nov 2010 18:07:27 +0000 (18:07 +0000)]
Update the NEWS file
Emmanuele Bassi [Fri, 19 Nov 2010 12:26:57 +0000 (12:26 +0000)]
actor: Reset the last paint box on unmap
This allows hiding + moving + showing an actor without repainting the
wrong area.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2395
Owen W. Taylor [Mon, 15 Nov 2010 06:32:42 +0000 (01:32 -0500)]
Free state at the end of a journal flush
At the end of flushing the journal, we need to free the vertex
attributes and vertex array.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2423
Owen W. Taylor [Mon, 15 Nov 2010 03:59:24 +0000 (22:59 -0500)]
Actually free buffer objects
With the refactoring to centralize code into CoglBuffer,
_cogl_buffer_fini() was never actually implemented, so all GL
vertex and index buffer objects were leaked.
The duplicate call to glDeleteBuffers() in CoglPixelArray is
removed (it wasn't paying attention to whether the buffer had been
allocated as a PBO or not.)
http://bugzilla.clutter-project.org/show_bug.cgi?id=2423
Robert Bragg [Tue, 16 Nov 2010 13:54:15 +0000 (13:54 +0000)]
egl: Adds support for clipped redraws
This adds egl backend support for handling clipped redraws. This uses
the EGL_NOK_swap_region extension to enable the EGL backend to present a
subregion from the back buffer to the front so we don't always have to
redraw the entire stage for small updates.
Robert Bragg [Tue, 16 Nov 2010 13:06:08 +0000 (13:06 +0000)]
debug: Adds a COGL_DEBUG=wireframe option
This adds a COGL_DEBUG=wireframe option to visualize the underlying
geometry of the primitives being drawn via Cogl. This works for triangle
list, triangle fan, triangle strip and quad (internal only) primitives.
It also works for indexed vertex arrays.
Robert Bragg [Tue, 16 Nov 2010 08:52:49 +0000 (08:52 +0000)]
vertex-buffer: don't unref NULL object
In cogl_vertex_buffer_indices_get_for_quads() we sometimes have to
extend the length of an existing array, but when we came to unref the
previous array we didn't first check that it wasn't simply NULL.
Robert Bragg [Tue, 16 Nov 2010 08:49:55 +0000 (08:49 +0000)]
vertex-array: Adds data arg for _vertex_array_new()
This adds an optional data argument for cogl_vertex_array_new() since it
seems that mostly every case where we use this API we follow up with a
cogl_buffer_set_data() matching the size of the new array. This
simplifies all those cases and whenever we want to delay uploading of
data then NULL can simply be passed.
Robert Bragg [Tue, 16 Nov 2010 08:41:29 +0000 (08:41 +0000)]
indices: Makes cogl_indices_get_array public
This makes the previously internal only _cogl_indices_get_array API
public as cogl_indices_get_array (Though marked as experimental)
Robert Bragg [Tue, 16 Nov 2010 08:38:59 +0000 (08:38 +0000)]
build: cogl-clip-state.h depends on cogl-clip-stack.h
This adds a #include "cogl-clip-stack.h" to cogl-clip-state.h which
depends on the CoglClipStack typedef.
Robert Bragg [Wed, 10 Nov 2010 18:27:00 +0000 (18:27 +0000)]
debug: disable-culling was disabling clipped redraws
there was a typo and the disable-culling option was actually disabling
clipped redraws.
Emmanuele Bassi [Thu, 18 Nov 2010 18:23:49 +0000 (18:23 +0000)]
build: Re-arrange headers
Try to minimize the included headers, especially in clutter-actor.h.
Emmanuele Bassi [Thu, 18 Nov 2010 14:14:37 +0000 (14:14 +0000)]
docs: Fix some wrong function/signal/property names
Emmanuele Bassi [Wed, 17 Nov 2010 15:51:35 +0000 (15:51 +0000)]
test-layout: Port away from Behaviour
Use a simple animation with a looping+reversing timeline.
Emmanuele Bassi [Wed, 10 Nov 2010 11:51:42 +0000 (11:51 +0000)]
test-rotate: Remove the behaviour code
Use a looping animation with a shared timeline instead.
Emmanuele Bassi [Wed, 10 Nov 2010 13:15:06 +0000 (13:15 +0000)]
docs: Add Behaviour migration guide
Emmanuele Bassi [Sat, 6 Nov 2010 15:54:21 +0000 (15:54 +0000)]
Deprecate ClutterBehaviour and sub-classes
The Behaviour class and its implementations have been replaced by the
new animation framework API and by the constraints for layout-related
animations.
Currently, we need to make tests build, so we undef DISABLE_DEPRECATED
in specific test cases while they get ported.
Emmanuele Bassi [Wed, 17 Nov 2010 15:27:42 +0000 (15:27 +0000)]
timeline: Add :reverse property
The :reverse property removes the pattern of connecting to the
::completed signal of a Timeline to change the direction.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2408
Emmanuele Bassi [Thu, 18 Nov 2010 14:02:52 +0000 (14:02 +0000)]
docs: Remove unnecessary '#'
The hash is confusing gtk-doc.
Emmanuele Bassi [Thu, 18 Nov 2010 10:53:01 +0000 (10:53 +0000)]
paint-volume: Do not take a reference on the actor
The paint volume structure is cached in the Actor it references, and
this causes a reference cycle.
The paint volume is going to be used when painting, so the actor must
still be valid - otherwise Clutter will bail out far before than
accessing the actor pointer in ClutterPaintVolume.
Otherwise, we could have used dispose() to check for a valid actor and
remove a reference if the actor field is !NULL; it feels less clean,
though, since we're effectively managing an extra reference on
ourselves.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2431
Emmanuele Bassi [Thu, 18 Nov 2010 11:00:08 +0000 (11:00 +0000)]
actor: Group bitfields together
Emmanuele Bassi [Wed, 17 Nov 2010 19:13:55 +0000 (19:13 +0000)]
build: Cogl-2.0 API reference should be conditionally built
Building the API reference for Cogl 2.0 is fairly confusing: the API
itself is experimental and for internal use only -- though we want
feedback for it.
Let's build the API reference only when Clutter is configured with a
specific configure switch, so that people that wish to give feedback on
the API and its documentation can do it.
Emmanuele Bassi [Sun, 7 Nov 2010 16:20:51 +0000 (16:20 +0000)]
Start using the monotonic API in GLib ≥ 2.27
Starting from the 2.27 cycle, GLib is exposing a monotonic clock with
microseconds granularity throughout the time-based API. We can start
using it, given that the old, non-monotonic version is going to be
deprecated by the same cycle.
Emmanuele Bassi [Sun, 7 Nov 2010 15:57:33 +0000 (15:57 +0000)]
Move away from GTimeVal
GLib 2.28 will deprecate GTimeVal and related API in favour of
standardizing on microseconds granularity for all time-based API.
Clutter should switch too.
All of the current users of GTimeVal convert to milliseconds when
doing time operations, and use GTimeVal only as storage. This can
effectively be replaced by a gint64.
The Master Clock uses a microsecond resolution, except when interacting
with the main loop itself, since the main loop has a millisecond
resolution - at least until Ryan Lortie manages to switch that too to
microseconds on Linux.
The clutter_timeline_do_tick() function was erroneously not privatized,
but it was still assumed to be private; we should just remove it from
the public symbols.
Emmanuele Bassi [Wed, 17 Nov 2010 12:49:10 +0000 (12:49 +0000)]
docs: Move the constraints example picture about the source code
Emmanuele Bassi [Wed, 17 Nov 2010 12:47:46 +0000 (12:47 +0000)]
shaders: Fix the usage of the Cogl GLSL variables
Emmanuele Bassi [Wed, 17 Nov 2010 12:14:02 +0000 (12:14 +0000)]
docs: Fix closing tag