profile/ivi/clutter.git
13 years agopipeline: remove layer->backend_priv[] array
Robert Bragg [Wed, 1 Dec 2010 16:53:08 +0000 (16:53 +0000)]
pipeline: remove layer->backend_priv[] array

This removes the unused array of per-packend priv data pointers
associated with every CoglPipelineLayer. This reduces the size of all
layer allocations and avoids having to zero an array for each
_cogl_pipeline_layer_copy.

13 years agocogl-object: remove un-used cogl_object_get_type
Robert Bragg [Wed, 1 Dec 2010 16:37:25 +0000 (16:37 +0000)]
cogl-object: remove un-used cogl_object_get_type

A non-static function named cogl_object_get_type was inadvertently added
during the addition of the CoglObject base type, but there is no public
prototype in the headers and it's only referenced inside cogl-object.c
to implement cogl_handle_get_type() for compatibility. This removes the
function since we don't want to commit to CoglObject always simply being
a boxed type. In the future we may want to register hierarchical
GTypeInstance based types.

13 years agomatrix gtype: registers a boxed type for CoglMatrix
Robert Bragg [Mon, 29 Nov 2010 21:42:06 +0000 (21:42 +0000)]
matrix gtype: registers a boxed type for CoglMatrix

To allow us to have gobject properties that accept a CoglMatrix value we
need to register a GType. This adds a cogl_gtype_matrix_get_type function
that will register a static boxed type called "CoglMatrix".

This adds a new section to the reference manual for GType integration
functions.

13 years agomatrix: Adds matrix_copy and _free functions
Robert Bragg [Mon, 29 Nov 2010 18:47:10 +0000 (18:47 +0000)]
matrix: Adds matrix_copy and _free functions

As a pre-requisite for being able to register a boxed GType for
CoglMatrix (enabling us to define gobject properties that accept a
CoglMatrix) this adds cogl_matrix_copy and _free functions.

13 years agopipeline simple optimization for _needs_blending_enabled
Robert Bragg [Fri, 3 Dec 2010 16:59:52 +0000 (16:59 +0000)]
pipeline simple optimization for _needs_blending_enabled

In _cogl_pipeline_needs_blending_enabled after first checking whether
the property most recently changed requires blending we would then
resort to checking all other properties too in case some other state
also requires blending. We now avoid checking all other properties in
the case that blending was previously disabled and checking the property
recently changed doesn't require blending.

Note: the plan is to improve this further by explicitly keeping track
of the properties that currently cause blending to be enabled so that we
never have to resort to checking all other properties we can constrain
the checks to those masked properties.

13 years agopipeline: inline _get_parent and _get_authority
Robert Bragg [Fri, 3 Dec 2010 16:56:54 +0000 (16:56 +0000)]
pipeline: inline _get_parent and _get_authority

This moves _cogl_pipeline_get_parent and _cogl_pipeline_get_authority
into cogl-pipeline-private.h so they can be inlined since they have been
seen to get quite high in profiles. Given that they both contain such
small amounts of code the function call overhead is significant.

13 years agoAdd a COGL_DEBUG option to disable software clipping
Neil Roberts [Wed, 10 Nov 2010 14:02:31 +0000 (14:02 +0000)]
Add a COGL_DEBUG option to disable software clipping

This adds a debug option called disable-software-clipping which causes
the journal to always log the clip stack state rather than trying to
manually clip rectangles.

13 years agocogl-journal: Attempt to clip manually to avoid breaking up batches
Neil Roberts [Tue, 9 Nov 2010 19:18:37 +0000 (19:18 +0000)]
cogl-journal: Attempt to clip manually to avoid breaking up batches

Before flushing the journal there is now a separate iteration that
will try to determine if the matrix of the clip stack and the matrix
of the rectangle in each entry are on the same plane. If they are it
can completely avoid the clip stack and instead manually modify the
vertex and texture coordinates to implement the clip. The has the
advantage that it won't break up batching if a single clipped
rectangle is used in a scene.

The software clip is only used if there is no user program and no
texture matrices. There is a threshold to the size of the batch where
it is assumed that it is worth the cost to break up a batch and
program the GPU to do the clipping. Currently this is set to 8
although this figure is plucked out of thin air.

To check whether the two matrices are on the same plane it tries to
determine if one of the matrices is just a simple translation of the
other. In the process of this it also works out what the translation
would be. These values can be used to translate the clip rectangle
into the coordinate space of the rectangle to be logged. Then we can
do the clip directly in the rectangle's coordinate space.

13 years agocogl-clip-stack: Move the struct definitions to the header
Neil Roberts [Tue, 9 Nov 2010 19:09:25 +0000 (19:09 +0000)]
cogl-clip-stack: Move the struct definitions to the header

It will be useful to be able to directly examine the contents of the
clip stack within the journal code.

13 years agocogl-clip-stack: Don't convert rect clips to window clips
Neil Roberts [Tue, 9 Nov 2010 12:01:04 +0000 (12:01 +0000)]
cogl-clip-stack: Don't convert rect clips to window clips

Previously in cogl-clip-state.c when it detected that the current
modelview matrix is screen-aligned it would convert the clip entry to
a window clip. Instead of doing this cogl-clip-stack.c now contains
the detection and keeps the entry as a rectangle clip but marks that
it is entirely described by its scissor rect. When flusing the clip
stack it doesn't do anything extra for entries that have this mark
(because the clip will already been setup by the scissor). This is
needed so that we can still track the original rectangle coordinates
and modelview matrix to help detect when it would be faster to modify
the rectangle when adding it to the journal rather than having to
break up the batch to set the clip state.

13 years agocogl-journal: Defer expanding the vertices until uploading
Neil Roberts [Thu, 25 Nov 2010 21:08:45 +0000 (21:08 +0000)]
cogl-journal: Defer expanding the vertices until uploading

When logging a quad we now only store the 2 vertices representing the
top left and bottom right of the quad. The color is only stored once
per entry. Once we come to upload the data we expand the 2 vertices
into four and copy the color to each vertex. We do this by mapping the
buffer and directly expanding into it. We have to copy the data before
we can render it anyway so it doesn't make much sense to expand the
vertices before uploading and this way should save some space in the
size of the journal. It also makes it slightly easier if we later want
to do pre-processing on the journal entries before uploading such as
doing software clipping.

The modelview matrix is now always copied to the journal entry whereas
before it would only be copied if we aren't doing software
transform. The journal entry struct always has the space for the
modelview matrix so hopefully it's only a small cost to copy the
matrix.

The transform for the four entries is now done using
cogl_matrix_transform_points which may be slightly faster than
transforming them each individually with a call to
cogl_matrix_transfom.

13 years agoRevert "cogl: Remove the generated array size for cogl_tex_coord_in"
Neil Roberts [Thu, 2 Dec 2010 21:08:30 +0000 (21:08 +0000)]
Revert "cogl: Remove the generated array size for cogl_tex_coord_in"

This reverts commit 4cfe90bde275dbb952645397aa2ba2d6f6e2f3ba.

GLSL 1.00 on GLES doesn't support unsized arrays so the whole idea
can't work.

Conflicts:

clutter/cogl/cogl/cogl-pipeline-glsl.c

13 years agowin32: export TARGET and ROOT_DIR in env.sh
Damien Lespiau [Thu, 2 Dec 2010 15:46:40 +0000 (15:46 +0000)]
win32: export TARGET and ROOT_DIR in env.sh

So children of the shell sourcing it can use them (eg. buildbot slaves)

13 years agowin32: Detect the mingw32 cross compiler on Fedora
Damien Lespiau [Thu, 2 Dec 2010 15:41:43 +0000 (15:41 +0000)]
win32: Detect the mingw32 cross compiler on Fedora

Fedora mingw32 cross compiler is prefix with i686-pc-mingw32-.

13 years agowin32: Update glib and cairo version in mingw-cross-compile.sh
Damien Lespiau [Thu, 2 Dec 2010 14:03:01 +0000 (14:03 +0000)]
win32: Update glib and cairo version in mingw-cross-compile.sh

Clutter has moved on and now depends on glib 2.26 and cairo 1.10
(for cairo-gobject).

13 years agocogl-pipeline-glsl: Fix reusing shaders for shared ancestors
Neil Roberts [Thu, 2 Dec 2010 16:30:55 +0000 (16:30 +0000)]
cogl-pipeline-glsl: Fix reusing shaders for shared ancestors

The check for whether we can reuse a program we've already generated
was only being done if the pipeline already had a
glsl_program_state. When there is no glsl_program_state it then looks
for the nearest ancestor it can share the program with. It then
wasn't checking whether that ancestor already had a GL program so it
would start generating the source again. It wouldn't however compile
that source again because _cogl_pipeline_backend_glsl_end does check
whether there is already a program. This patch moves the check until
after it has found the glsl_program_state, whether or not it was found
from an ancestor or as its own state.

13 years agocogl: Remove the generated array size for cogl_tex_coord_in
Neil Roberts [Thu, 2 Dec 2010 12:27:29 +0000 (12:27 +0000)]
cogl: Remove the generated array size for cogl_tex_coord_in

Under GLES2 we were defining the cogl_tex_coord_in varying as an array
with a size determined by the number of texture coordinate arrays
enabled whenever the program is used. This meant that we may have to
regenerate the shader with a different size if the shader is used with
more texture coord arrays later. However in OpenGL the equivalent
builtin varying gl_TexCoord is simply defined as:

varying vec4 gl_TexCoord[]; /* <-- no size */

GLSL is documented that if you declare an array with no size then you
can only access it with a constant index and the size of the array
will be determined by the highest index used. If you want to access it
with a non-constant expression you need to redeclare the array
yourself with a size.

We can replicate the same behaviour in our Cogl shaders by instead
declaring the cogl_tex_coord_in with no size. That way we don't have
to pass around the number of tex coord attributes enabled when we
flush a material. It also means that CoglShader can go back to
directly uploading the source string to GL when cogl_shader_source is
called so that we don't have to keep a copy of it around.

If the user wants to access cogl_tex_coord_in with a non-constant
index then they can simply redeclare the array themself. Hopefully
developers will expect to have to do this if they are accustomed to
the gl_TexCoord array.

13 years agokeysyms: Update the list
Emmanuele Bassi [Tue, 30 Nov 2010 18:55:38 +0000 (18:55 +0000)]
keysyms: Update the list

Add TouchpadOn and TouchpadOff from the X11 key symbols.

13 years agocogl-pipeline: Fix comparing layer states for finding codgen authority
Neil Roberts [Wed, 1 Dec 2010 15:48:37 +0000 (15:48 +0000)]
cogl-pipeline: Fix comparing layer states for finding codgen authority

When compiling for GLES2, the codegen is affected by state other than
the layers. That means when we find an authority for the codegen state
we can't directly look at authority->n_layers to determine the number
of layers because it isn't necessarily the layer state authority. This
patch changes it to use cogl_pipeline_get_n_layers instead. Once we
have two authorities that differ in codegen state we then compare all
of the layers to decide if they would affect codegen. However it was
ignoring the fact that the authorities might also differ by the other
codegen state. This path also adds an extra check for whether
_cogl_pipeline_compare_differences contains any codegen bits other
than COGL_PIPELINE_STATE_LAYERS.

13 years agocogl-pipeline: Fix the codgen authority for texture target changes
Neil Roberts [Wed, 1 Dec 2010 14:39:28 +0000 (14:39 +0000)]
cogl-pipeline: Fix the codgen authority for texture target changes

When determining if a layer would require a different shader to be
generated it needs to check a certain set of state changes and it
needs to check whether the texture target is different. However it was
checking whether texture texture was different only if the other state
was also different which doesn't make any sense. It also only checked
the texture difference if that was the only state change which meant
that effectively the code was impossible to reach. Now it does the
texture target check indepent of the other state changes.

13 years agocogl-pipeline-fixed: Use the correct state flag for combine constant
Neil Roberts [Tue, 30 Nov 2010 22:28:38 +0000 (22:28 +0000)]
cogl-pipeline-fixed: Use the correct state flag for combine constant

The fixed pipeline backend wasn't correctly flushing the combine
constant because it was using the wrong flag to determine if the
combine constant has changed since the last flushed material.

13 years agocogl-pipeline-opengl: Fix enabling previously disabled units
Neil Roberts [Tue, 30 Nov 2010 22:17:17 +0000 (22:17 +0000)]
cogl-pipeline-opengl: Fix enabling previously disabled units

When enabling a unit that was disabled from a previous flush pipeline
it was forgetting to rebind the right texture unit so it wouldn't
work. This was causing the redhand to disappear when using the fixed
function backend in test-cogl-multitexture if anything else is added
to the scene.

13 years agocogl-pipeline: Add more ignored state changes for program generation
Neil Roberts [Tue, 30 Nov 2010 22:15:40 +0000 (22:15 +0000)]
cogl-pipeline: Add more ignored state changes for program generation

For shader generation backends we don't need to worry about changes to
the texture object and changing the user matrix. The missing user
matrix flag was causing test-cogl-multitexture to regenerate the
shader every frame.

13 years agocogl: Revert "build: Remove unused variable"
Damien Lespiau [Tue, 30 Nov 2010 16:36:56 +0000 (16:36 +0000)]
cogl: Revert "build: Remove unused variable"

Having ctx here produces a warning on GLES. However it's needed for Big
GL as we have at the top of the file:

 #ifdef HAVE_COGL_GL
 #define glClientActiveTexture ctx->drv.pf_glClientActiveTexture
 #endif

This reverts commit 27a3a2056a245aca64b8e3a7d82b7976c13e897a.

13 years agoegl: Fix compilation with EGLX
Damien Lespiau [Tue, 30 Nov 2010 16:22:49 +0000 (16:22 +0000)]
egl: Fix compilation with EGLX

That what happens when you test things only with 2 configure options
instead of 3. The 2 tested compile, the third one breaks. Another good
catch for the eglx bot!

13 years agocogl: Fix unused variable warning with GLES2
Damien Lespiau [Tue, 30 Nov 2010 16:03:26 +0000 (16:03 +0000)]
cogl: Fix unused variable warning with GLES2

This shader variable is only used with big GL.

13 years agoegl: Don't try to use stage_x11 with non-X winsys
Damien Lespiau [Tue, 30 Nov 2010 15:06:12 +0000 (10:06 -0500)]
egl: Don't try to use stage_x11 with non-X winsys

The access to stage_x11 has to be protected by COGL_HAS_X11_SUPPORT.

13 years agoevdev: Add a comment to revisit the GSource management with glib 2.28
Damien Lespiau [Tue, 30 Nov 2010 14:50:13 +0000 (14:50 +0000)]
evdev: Add a comment to revisit the GSource management with glib 2.28

With glib 2.28, we'll be able to have one GSource per device manager
with child sources for earch device. Make a note to update the code
in a few months.

13 years agobuild: Remove unused variable
Damien Lespiau [Fri, 19 Nov 2010 19:51:39 +0000 (14:51 -0500)]
build: Remove unused variable

and be 100% warning free again.

13 years agoevdev: Enable the compilation of the evdev backend for eglnative
Damien Lespiau [Fri, 19 Nov 2010 19:31:51 +0000 (14:31 -0500)]
evdev: Enable the compilation of the evdev backend for eglnative

Not tested (but checked that it compiles).

There's no reason to only enable the check for the cex100. Hopefully
should work.

We make sure not to enable both the evdev and the tslib backend at the
same time as the DeviceManager is a singleton and we can't have both
subclasses at the same time for now.

13 years agoevdev: Don't oveflow when translating buttons to masks
Damien Lespiau [Fri, 19 Nov 2010 19:19:52 +0000 (14:19 -0500)]
evdev: Don't oveflow when translating buttons to masks

An array is used to translate the button to its mask. Clutter defines
the masks for button 1 to 5 but we report BTN_LEFT..BTN_TASK ie
0x110..0x117. We need to pad the array for the translation not to access
random data for buttons between 0x115 and 0x117.

13 years agoinput-device: Warn if the device has no associated stage
Damien Lespiau [Fri, 12 Nov 2010 00:11:27 +0000 (19:11 -0500)]
input-device: Warn if the device has no associated stage

Discarding the event without any warning when the device has no
associated stage makes it hard to find the bug for people implementing
new event backends. We should really warn for that abnormal condition in
_clutter_input_device_update().

13 years agoevdev: Add mouse support
Damien Lespiau [Fri, 12 Nov 2010 00:07:35 +0000 (19:07 -0500)]
evdev: Add mouse support

We know support EV_REL events comming from evdev devices. This addition
is pretty straigthforward, it adds a x,y per GSource listening to a
evdev device, updates from EL_REL (relative) events and craft new
ClutterMotionEvents. As for buttons, BTN_LEFT..BTN_TASK are translated
to ClutterButtonEvents with 1..8 as button number.

13 years agoevdev: Only create a xkbcommon mapping for keyboard devices
Damien Lespiau [Tue, 9 Nov 2010 18:14:37 +0000 (13:14 -0500)]
evdev: Only create a xkbcommon mapping for keyboard devices

13 years agoevdev: Close the device gracefully in case of a read() error
Damien Lespiau [Tue, 9 Nov 2010 18:02:53 +0000 (13:02 -0500)]
evdev: Close the device gracefully in case of a read() error

Even with udev, the read fails before udev has a chance to signal the
change. Hence (and to handle errors gracefully anyway), let's remove the
device from the device manager in case of a read() error.

13 years agoevdev: Merge clutter-event-evdev.[ch] into the device manager
Damien Lespiau [Tue, 9 Nov 2010 17:50:23 +0000 (12:50 -0500)]
evdev: Merge clutter-event-evdev.[ch] into the device manager

The device manager now fully owns the GSources corresponding to the
devices it manages. This will allow not only to remove the source when
udev signals a device removal but also handle read() errors gracefully
by removing the faulty device from the manager.

13 years agoevdev: Support hotplug (addition/removal) of evdev devices
Damien Lespiau [Tue, 9 Nov 2010 16:56:26 +0000 (11:56 -0500)]
evdev: Support hotplug (addition/removal) of evdev devices

Just connect to the GUdevClient "uevent" signal and deals with
"add"/"remove" commands. This drives the installation/removal of
GSource to listen to the device.

13 years agoevdev: Make sure we only add evdev devices
Damien Lespiau [Mon, 8 Nov 2010 16:38:16 +0000 (11:38 -0500)]
evdev: Make sure we only add evdev devices

Let's use the sysfs path of the device to make sure we only load evdev
device, not legacy mousedev ones for instance. We rely on the sysfs
API/ABI guarantees and look for devices finishing by /input%d/event%d.

13 years agoevdev: First stab at an evdev backend
Damien Lespiau [Thu, 4 Nov 2010 14:38:32 +0000 (10:38 -0400)]
evdev: First stab at an evdev backend

This backend is a event backend that can be enabled for EGL (for now).
It uses udev (gudev) to query input devices on a linux system, listens to
keyboard events from input devices and xkbcommon to translate raw key
codes into key keysyms.

This commit only supports key events, more to follow.

13 years agoevdev: Fix the unicode_value for new ClutterEvents
Damien Lespiau [Thu, 4 Nov 2010 14:09:28 +0000 (10:09 -0400)]
evdev: Fix the unicode_value for new ClutterEvents

Looking at what the X11 backend does: the unicode value is being
translated to the unicode codepoint of the symbol if possible. Let's do
the same then.

Before that, key events for say KEY_Right (0xff53) had the unicode_value
set to the keysym, which meant "This key event is actually printable and
is Unicode codepoint is 0xff53", which lead to interesting results.

13 years agoevdev: Factor out the xkbcommon code from the wayland client backend
Damien Lespiau [Thu, 4 Nov 2010 10:59:22 +0000 (06:59 -0400)]
evdev: Factor out the xkbcommon code from the wayland client backend

The wayland client code has support for translating raw linux input
device key codes coming from the wayland compositor into key symbols
thanks to libxkbcommon.

A backend directly listening to linux input devices (called evdev, just
like the Xorg one) could use exactly the same code for the translation,
so abstract it a bit in a separate file.

13 years agomoduleset: Add gstreamer and gst-plugins-good
Emmanuele Bassi [Tue, 30 Nov 2010 10:35:17 +0000 (10:35 +0000)]
moduleset: Add gstreamer and gst-plugins-good

13 years agomoduleset: Disable stand-alone Cally
Emmanuele Bassi [Tue, 30 Nov 2010 10:34:59 +0000 (10:34 +0000)]
moduleset: Disable stand-alone Cally

13 years agomoduleset: Switch gtk2 to the 2.24 branch
Emmanuele Bassi [Tue, 30 Nov 2010 10:34:38 +0000 (10:34 +0000)]
moduleset: Switch gtk2 to the 2.24 branch

13 years agoPost-release version bump to 1.5.9
Emmanuele Bassi [Mon, 29 Nov 2010 14:21:21 +0000 (14:21 +0000)]
Post-release version bump to 1.5.9

13 years agoRelease Clutter 1.5.8 (snapshot)
Emmanuele Bassi [Mon, 29 Nov 2010 14:09:09 +0000 (14:09 +0000)]
Release Clutter 1.5.8 (snapshot)

13 years agocogl-shader.c: Don't add the common boilerplate twice
Neil Roberts [Mon, 29 Nov 2010 10:55:49 +0000 (10:55 +0000)]
cogl-shader.c: Don't add the common boilerplate twice

In 6246c2bd6 I moved the code to add the boilerplate to a shader to a
separate function and also made it so that the common boilerplate is
added as a separate string to glShaderSource. However I didn't notice
that the #define for the vertex and fragment shaders already includes
the common part so it was being added twice. Mesa seems to accept this
but it was causing problems on the IMG driver because COGL_VERSION was
defined twice.

13 years agocogl-pipeline-glsl: Use char* instead of GLchar*
Neil Roberts [Mon, 29 Nov 2010 10:51:40 +0000 (10:51 +0000)]
cogl-pipeline-glsl: Use char* instead of GLchar*

It appears that some GLES2 headers don't define GLchar and it works
just as well to use a regular char.

13 years agodocs: Close a tag
Emmanuele Bassi [Mon, 29 Nov 2010 12:23:14 +0000 (12:23 +0000)]
docs: Close a tag

13 years agoUpdate NEWS
Emmanuele Bassi [Mon, 29 Nov 2010 12:01:20 +0000 (12:01 +0000)]
Update NEWS

13 years agoMerge remote branch 'elliot/cookbook-animations-scaling'
Emmanuele Bassi [Mon, 29 Nov 2010 11:56:36 +0000 (11:56 +0000)]
Merge remote branch 'elliot/cookbook-animations-scaling'

* elliot/cookbook-animations-scaling:
  cookbook: Add recipe for animated scaling of an actor
  cookbook: Add example of scaling a texture
  cookbook: Added "animated scaling" recipe skeleton
  cookbook: Added animated scaling example

13 years agotext: Optimise get_preferred_height for single-line-mode
Chris Lord [Thu, 25 Nov 2010 15:11:42 +0000 (15:11 +0000)]
text: Optimise get_preferred_height for single-line-mode

Don't calculate an extra layout in clutter_text_get_preferred_height for
single-line strings, when it's unnecessary. There's no need to set the
width of a layout when in single-line mode, as wrapping will not happen.

13 years agoUpdate NEWS file
Emmanuele Bassi [Mon, 29 Nov 2010 11:19:16 +0000 (11:19 +0000)]
Update NEWS file

13 years agoshader-effect: Remove unused function
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.

13 years agoClutterShaderEffect: Don't throw away the program for a new actor
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

13 years agoClutterOffscreenEffect: Don't throw away the material for a new actor
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

13 years agoDon't bail out from creating the FBO if we don't have it yet.
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

13 years agoSet the signal handler to 0 when disconnecting it.
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

13 years agoshader-effect: Zero out ShaderUniform
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

13 years agocogl_pipeline_equal: Fix the comparison for layer texture equality
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.

13 years agotests: Adds test-cogl-perf micro benchmark
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.

13 years agoprimitives: avoid leaking polygon override materials
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.

13 years agoFixed "the the" repetitions in some doc strings
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

13 years agopipeline: Simplify layer change notifications to backend
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.

13 years agoclutter-offscreen-effect: Don't recreate the material when FBO changes
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.

13 years agocogl-context: Get rid of the features_cached member
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.

13 years agoLower the priority of the GLSL pipeline backend
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.

13 years agoAdd a COGL_DEBUG option to disable the fixed function pipeline backend
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.

13 years agoDon't use the fixed function backend if there is a user program
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.

13 years agoAdd a warning message when no usable Cogl pipeline backend is found
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.

13 years agocogl-pipeline-glsl: Don't use gl_PointCoord on OpenGL
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.

13 years agoAdd a conformance test that uses a vertex shader with no frag shader
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

13 years agoRemove the fragment shader generation from the GLES2 wrapper
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.

13 years agoDisable the fixed function backend for GLES2
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.

13 years agocogl-pipeline-glsl: Generate the alpha test snippet under GLES2
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.

13 years agocogl-pipeline: Add getters for the alpha test state
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.

13 years agocogl: Separate out state flags for the alpha test func and ref
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.

13 years agoRemove the disabling of layer constants for GLES2
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.

13 years agoGenerate GLSL in the CoglPipeline GLSL backend
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.

13 years agoMove the cogl shader boilerplate setting code to a separate function
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.

13 years agoMove need_texture_combine_separate to cogl-pipeline
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.

13 years agoMove find_arbfp_authority to cogl-pipeline.c
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.

13 years agocogl: Rename arbfp_source_buffer to fragment_source_buffer
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.

13 years agocogl: Include exported pacakges information in GIR
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

13 years agodocs: Update documentation to reflect automatic map/unmap/etc.
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.

13 years agoactor: Use the internal child list for map/unmap
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.

13 years agoactor: re-work unrealize to work with composite actors
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.

13 years agoactor: make _clutter_actor_traverse more flexible
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.

13 years agoClutterX11TexturePixmap: Optimize ConfigureEvent handling
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

13 years agotest-cogl-texture-get-set-data: Test the alpha component
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

13 years agoUse FBOs and use cogl_read_pixels() to efficiently read partial textures
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

13 years agocogl-framebuffer: Try to track format of the framebuffer
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

13 years agocogl_read_pixels: Fix the format used in GLES2
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

13 years agoAdd an internal _cogl_read_pixels_with_rowstride
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

13 years agoAdd an internal _cogl_offscreen_new_to_texture_full function
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

13 years agoTest slicing when getting data in both directions
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

13 years agostage: if backend _ignoring_redraw_clips queue full redraw
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.

13 years agostage-window: tweak has_redraw_clips semantics
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.

13 years agocookbook: Add recipe for animated scaling of an actor
Elliot Smith [Wed, 24 Nov 2010 12:44:35 +0000 (12:44 +0000)]
cookbook: Add recipe for animated scaling of an actor

Recipe explains how to animate scaling a single actor.

Also covers scaling vs. resizing, scale center, and
scaling within layouts and containers.

The first example shows how animations around each scale
gravity look, as well as tracking the transformed position
and size of the actor and displaying those.

The second example is a simple image viewer with zoom in/out
using scaling.

13 years agocookbook: Add example of scaling a texture
Elliot Smith [Wed, 24 Nov 2010 12:22:12 +0000 (12:22 +0000)]
cookbook: Add example of scaling a texture

Added a simple application for scaling a
texture while keeping the mouse pointer over
the same coordinates on its surface.