Commit Graph

5819 Commits

Author SHA1 Message Date
Emmanuele Bassi
bc548dc862 Store the motion event deliver flag in ClutterStage
Once upon a time, the land of Clutter had a stage singleton. It was
created automatically at initialization time and stayed around even
after the main loop was terminated. The singleton was content in
being all there was. There also was a global API to handle the
configuration of the stage singleton that would affect the behaviour
on other classes, signals and properties.

Then, an evil wizard came along and locked the stage singleton in his
black tower, and twisted it until it was possible to create new stages.
These new stages were pesky, and didn't have the same semantics of the
singleton: they didn't stay around when closed, or terminate the main
loop on delete events.

The evil wizard also started moving all the stage-related API from the
global context into class-specific methods.

Finally, the evil wizard cast a spell, and the stage singleton was
demoted to creation on demand - and until somebody called the
clutter_stage_get_default() function, the singleton remained in a limbo
of NULL pointers and undefined memory areas.

There was a last bit - literally - of information still held by the
global API; a tiny, little flag that disabled per-actor motion events.
The evil wizard added private accessors for it, and stored it inside the
stage private structure, in preparation for a deprecation that would
come in a future development cycle.

The evil wizard looked down upon the land of Clutter from the height of
his black tower; the lay of the land had been reshaped into a crucible
of potential, and the last dregs of the original force of creation were
either molted into new, useful shapes, or blasted away by the sheer fury
of his will.

All was good.
2011-02-18 19:41:41 +00:00
Emmanuele Bassi
7500b77b2b Assert if we call backend API without a valid backend
This is a backend programming error, and we should not tolerate
failures in these cases.
2011-02-18 17:51:01 +00:00
Emmanuele Bassi
7e42da123f Clean up clutter-private.h
Move macros at the top, and clean up whitespace.
2011-02-18 16:53:58 +00:00
Emmanuele Bassi
cdd9fd1af1 Move ActorMeta private function in the private header
No reason to leave it in the installed header.
2011-02-18 16:53:31 +00:00
Emmanuele Bassi
3e5aa9ed63 Add private header for event-related API 2011-02-18 16:35:36 +00:00
Emmanuele Bassi
d27b335b61 Move ClutterEffect private symbols to a private header
No point in cluttering up clutter-private.h even more than necessary.
2011-02-18 16:00:39 +00:00
Emmanuele Bassi
3addeb91cc Privatize all ClutterIdPool functions
The clutter-id-pool.h header is private and not installed; yet, all the
clutter_id_pool_* symbols are public. Let's correct this oversight we've
been stringing along since forever.
2011-02-18 15:53:27 +00:00
Emmanuele Bassi
37fe8c509a Clean up usage of CLUTTER_CONTEXT and remove the macro
Only allow access to the ClutterMainContext through the private
_clutter_context_get_default() function, so we can easily grep
it and remove the unwanted usage of the global context.
2011-02-18 15:47:35 +00:00
Emmanuele Bassi
689aac56c9 Wrap id-pool access
The ClutterIdPool is held by the ClutterMainContext; we should hide its
direct usage into sensible private API.
2011-02-18 15:46:13 +00:00
Emmanuele Bassi
2593bbaadc Wrap shader stack into private functions
The shader stack held by ClutterMainContext should only be accessed
using functions, and not directly.

Since it's a stack, we can use stack-like operations: push, pop and
peek.
2011-02-18 15:44:17 +00:00
Emmanuele Bassi
28b0f8b938 stage: Make the redraw_count a stage counter
We don't care about redraws issued on stages that are not currently
being repainted.
2011-02-18 14:38:54 +00:00
Emmanuele Bassi
4635c8f9fd Make _clutter_pixel_to_id() private
It's only used in the same file that declares it.
2011-02-18 14:38:24 +00:00
Emmanuele Bassi
92ddaa9c13 stage: Move stage redraw logic into clutter-stage.c
The _clutter_do_redraw() function should really be moved inside
ClutterStage, since all it does is calling private stage and
backend functions. This also allows us to change a long-standing
issue with a global fps counter for all stages, instead of a\
per-stage one.
2011-02-18 12:56:17 +00:00
Emmanuele Bassi
89a0d514b4 Continue hiding the ClutterMainContext
We should strive to make the main context as transparent as possible,
and hide accessing its data through private functions.
2011-02-18 12:56:13 +00:00
Emmanuele Bassi
fc89513295 actor: Move the ShaderData out of the private data
Let's try and start reducing the size of ClutterActorPrivate by moving
some optional, out-of-band data from it to GObject data.

The ShaderData structure is a prime candidate for this migration: it
does not need to be inspected by the actor, and its relationship with an
actor is transient and optional.

By attaching it to the actor's instance through g_object_set_data() we
neatly tie its lifetime to the instance, and we don't have to care
cleaning it up in the finalize()/dispose() implementation of
ClutterActor itself.
2011-02-18 11:43:27 +00:00
Neil Roberts
9ea2567a2f cogl-atlas-texture: Don't let textures be destroyed during migration
If an atlas texture's last reference is held by the journal or by the
last flushed pipeline then if an atlas migration is started it can
cause a crash. This is because the atlas migration will cause a
journal flush and can sometimes change the current pipeline which
means that the texture would be destroyed during migration.

This patch adds an extra 'post_reorganize' callback to the existing
'reorganize' callback (which is now renamed to 'pre_reorganize'). The
pre_reorganize callback is now called before the atlas grabs a list of
the current textures instead of after so that it doesn't matter if the
journal flush destroys some of those textures. The pre_reorganize
callback for CoglAtlasTexture grabs a reference to all of the textures
so that they can not be destroyed when the migration changes the
pipeline. In the post_reorganize callback the reference is removed
again.

http://bugzilla.clutter-project.org/show_bug.cgi?id=2538
2011-02-17 13:39:30 +00:00
Neil Roberts
71f57eef1b clutter-actor: Free the paint volume when queue a clip redraw
In _clutter_actor_queue_redraw_with_clip it has a local variable to
mark when a new paint volume for the clip is created so that it can be
freed when the function returns. However the actual code to free the
paint volume went missing in 3b789490d2 so the variable did
nothing. This patch just adds the free back in.
2011-02-16 19:00:05 +00:00
Emmanuele Bassi
8231c345dc build: Compress the CLUTTER_PC_FILES list
A bit of black magic, courtesy of gtk+'s configure.ac, to strip the
leading space from BACKEND_PC_FILES.
2011-02-16 16:42:30 +00:00
Neil Roberts
0e32da6650 clutter-color-size-effect: Fix a minor typo in the docs
'Since:' was spelt 'SinceL' which I assume was a typo.
2011-02-16 14:11:59 +00:00
Emmanuele Bassi
354f7b0e25 backend: Remove usage of CLUTTER_STAGE_TYPE
It's only used for debugging purposes, and it's of limited usage since
the stage creation is deferred to the backend implementation itself.
2011-02-15 14:48:41 +00:00
Neil Roberts
ca94d0cc37 cogl-atlas: Fix a compiler warning when Cogl debug is disabled
When Cogl debugging is disabled then the 'waste' variable is not used
so it throws a compiler warning. This patch removes the variable and
the value is calculated directly as the parameter to COGL_NOTE.
2011-02-15 14:26:18 +00:00
Neil Roberts
c5f057822e cogl-debug: Don't define _cogl_debug_flags when debugging disabled
_cogl_debug_flags isn't used when COGL_DEBUG is not defined so there's
no need to declare it.

Based on a patch by Fan, Chun-wei

http://bugzilla.clutter-project.org/show_bug.cgi?id=2561
2011-02-15 14:26:17 +00:00
Neil Roberts
fb3321d4fe cogl: Avoid pointer arithmetic on void* pointers
Some code was doing pointer arithmetic on the return value from
cogl_buffer_map which is void* pointer. This is a GCC extension so we
should try to avoid it. This patch adds casts to guint8* where
appropriate.

Based on a patch by Fan, Chun-wei.

http://bugzilla.clutter-project.org/show_bug.cgi?id=2561
2011-02-15 14:26:17 +00:00
Neil Roberts
e52cc75f07 configure.ac: Add -Wpointer-arith to the maintainer CFLAGS
GCC by default allows pointer arithmetic on void* pointers and treats
them as having a size of 1 byte. This is non-standard behaviour and
causes errors on some compilers so we should try to avoid
it. -Wpointer-arith warns about these cases.
2011-02-15 14:26:17 +00:00
Emmanuele Bassi
6dc4af1c5d docs: Update the README
Fix some typos; add URLs for API references and Bugzilla.
2011-02-15 14:15:59 +00:00
Emmanuele Bassi
92d13a1966 build: Re-enable --warn-all for g-ir-scanner
Now that I don't have to see a bunch of false positives any more, we can
finally use warnings to catch issues.
2011-02-15 12:40:12 +00:00
Emmanuele Bassi
6309fd6cd7 introspection: Override the GParamSpec type
About other assorted boneheadedness, the GType for GParamSpec is
called 'GParam'. Why? Who knows. I assume alcohol was involved,
but I honestly don't want to know.

This removes the last g-ir-scanner warning in Clutter.
2011-02-15 12:40:12 +00:00
Emmanuele Bassi
6655bedba7 Fix ISO C90 compiler warnings in Cogl
Mixing declarations and statements and unused variables.
2011-02-15 12:40:11 +00:00
Emmanuele Bassi
5c398c18ad More ISO C90 warning fixes in Clutter
This time, in Clutter core.

The ObjC standard library provides a type called 'id', which obviously
requires any library to either drop the useful shadowed variable warning
or stop using 'id' as a variable name.

Yes, it's almost unbearably stupid. Well, at least it's not 'index' in
string.h, or 'y2' in math.h.
2011-02-15 12:40:11 +00:00
Emmanuele Bassi
54a4511247 Fix some ISO C90 warnings on OSX 2011-02-15 12:14:17 +00:00
Neil Roberts
e90ded6c23 cogl-atlas: Try 4 different approaches for migrating textures
Instead of directly banging GL to migrate textures the atlas now uses
the CoglFramebuffer API. It will use one of four approaches; it can
set up two FBOs and use _cogl_blit_framebuffer to copy between them;
it can use a single target fbo and then render the source texture to
the FBO using a Cogl draw call; it can use a single FBO and call
glCopyTexSubImage2D; or it can fallback to reading all of the texture
data back to system memory and uploading it again with a sub texture
update.

Previously GL calls were used directly because Cogl wasn't able to
create a framebuffer without a stencil and depth buffer. However there
is now an internal version of cogl_offscreen_new_to_texture which
takes a set of flags to disable the two buffers.

The code for blitting has now been moved into a separate file called
cogl-blit.c because it has become quite long and it may be useful
outside of the atlas at some point.

The 4 different methods have a fixed order of preference which is:

* Texture render between two FBOs
* glBlitFramebuffer
* glCopyTexSubImage2D
* glGetTexImage + glTexSubImage2D

Once a method is succesfully used it is tried first for all subsequent
blits. The default default can be overridden by setting the
environment variable COGL_ATLAS_DEFAULT_BLIT_MODE to one of the
following values:

* texture-render
* framebuffer
* copy-tex-sub-image
* get-tex-data
2011-02-15 12:10:54 +00:00
Neil Roberts
7b369445b3 cogl-texture-2d: Add _cogl_is_texture_2d to the private header
This adds a declaration for _cogl_is_texture_2d to the private header
so that it can be used in cogl-blit.c to determine if the target
texture is a simple 2D texture.
2011-02-15 12:10:54 +00:00
Neil Roberts
f947fe958f cogl-texture-2d: Add an internal wrapper around glCopyTexSubImage2D
This adds a function called _cogl_texture_2d_copy_from_framebuffer
which is a simple wrapper around glCopyTexSubImage2D. It is currently
specific to the texture 2D backend.
2011-02-15 12:10:54 +00:00
Neil Roberts
5cc062c16c cogl-framebuffer: Add _cogl_blit_framebuffer
This adds the _cogl_blit_framebuffer internal function which is a
wrapper around glBlitFramebuffer. The API is changed from the GL
version of the function to reflect the limitations provided by the
GL_ANGLE_framebuffer_blit extension (eg, no scaling or mirroring).
2011-02-15 12:10:54 +00:00
Neil Roberts
5a159fcef4 cogl-gles: Check for the GL_ANGLE_framebuffer_blit extension
This extension is the GLES equivalent of the GL_EXT_framebuffer_blit
extension except that it has some extra restrictions. We need to check
for some extension that provides glBlitFramebuffer so that we can
unconditionally use ctx->drv.pf_glBlitFramebuffer in both GL and GLES
code. Even with the restrictions, the extension provides enough
features for what Cogl needs.
2011-02-15 12:10:54 +00:00
Neil Roberts
80bae51c01 cogl-atlas-texture: Make copying a texture out more robust
Previously when _cogl_atlas_texture_migrate_out_of_atlas is called it
would unreference the atlas texture's sub-texture before calling
_cogl_atlas_copy_rectangle. This would leave the atlas texture in an
inconsistent state during the copy. This doesn't normally matter but
if the copy ends up doing a render then the atlas texture may end up
being referenced. In particular it would cause problems if the texture
is left in a texture unit because then Cogl may try to call
get_gl_texture even though the texture isn't actually being used for
rendering. To fix this the sub texture is now unrefed after the copy
call instead.
2011-02-15 12:10:54 +00:00
Neil Roberts
e57aa3ca3e cogl-framebuffer: Separate the draw and read buffer
The current framebuffer is now internally separated so that there can
be a different draw and read buffer. This is required to use the
GL_EXT_framebuffer_blit extension. The current draw and read buffers
are stored as a pair in a single stack so that pushing the draw and
read buffer is done simultaneously with the new
_cogl_push_framebuffers internal function. Calling
cogl_pop_framebuffer will restore both the draw and read buffer to the
previous state. The public cogl_push_framebuffer function is layered
on top of the new function so that it just pushes the same buffer for
both drawing and reading.

When flushing the framebuffer state, the cogl_framebuffer_flush_state
function now tackes a pointer to both the draw and the read
buffer. Anywhere that was just flushing the state for the current
framebuffer with _cogl_get_framebuffer now needs to call both
_cogl_get_draw_buffer and _cogl_get_read_buffer.
2011-02-15 12:10:54 +00:00
Emmanuele Bassi
bdb309cbd6 annotations: Use caller-allocates for color getters
This should avoid a separate initialization of a ClutterColor in
language bindings.
2011-02-14 18:41:18 +00:00
Emmanuele Bassi
9e17d06bc7 build: Add README template to EXTRA_DIST 2011-02-14 17:34:15 +00:00
Emmanuele Bassi
fbaac155c5 build: Generate README
Use the configure script to generate the README from a template file, so
that we can keep the versions of the dependencies in one place.
2011-02-14 17:27:25 +00:00
Emmanuele Bassi
b91befaaca Post-release version bump to 1.6.5 2011-02-14 16:15:55 +00:00
Emmanuele Bassi
c9b87435d5 Release Clutter 1.6.4 (stable) 2011-02-14 15:53:02 +00:00
Adel Gadllah
3d8445807a backend-glx: Remove redundant glFlush()
As noted in commit ce3f55292a an explict glFlush is needed for
both glBlitFramebuffer and glXCopySubBuffer.

_clutter_backend_glx_blit_sub_buffer was already doing an explicit
flush when using glBlitFramebuffer, so just do it unconditonally
and remove the call from clutter_stage_glx_redraw.

http://bugzilla.clutter-project.org/show_bug.cgi?id=2558
2011-02-14 12:55:49 +00:00
Emmanuele Bassi
3a378b849b stage/glx: Code clean ups 2011-02-14 12:00:31 +00:00
Emmanuele Bassi
48f2cb1f09 stage/x11: Clean up ClutterStageX11 struct
Use the right parent instance and class structure; the X11 stage
implementation hasn't been a ClutterGroup in a long, long time.
2011-02-14 11:59:49 +00:00
Emmanuele Bassi
24c311466c tests/multi-stage: Clean up child stages
Do not leave them around: force a destroy() on any child stage left when
the main loop quits.
2011-02-13 19:27:51 +00:00
Emmanuele Bassi
169df02a56 stage: Call ClutterStageWindow::unrealize() on dispose
Since we realize on creation we need to unrealize on destruction. This
makes sure that the ClutterStageWindow implementation can tear down any
resource set up during the realization phase.

http://bugzilla.clutter-project.org/show_bug.cgi?id=2559
2011-02-13 19:26:29 +00:00
Emmanuele Bassi
7c356fd05b stage/x11: Add a debug note for unrealization
We remove the ClutterStageWindow ↔ Window mapping in the ::unrealize
implementation; let's just check that we get there using a simple
debug note.
2011-02-13 19:25:21 +00:00
Emmanuele Bassi
c2c51b2950 build: Fix clutter-config.h defines
The checks for non-x11/glx platforms were using the wrong configure.ac
variables and values.
2011-02-11 16:53:28 +00:00
Emmanuele Bassi
2abf56fe92 Merge remote-tracking branch 'nobled/wayland-fixes2'
* nobled/wayland-fixes2:
  wayland: fix shm buffers
  wayland: set renderable type on dummy surface
  wayland: check for egl extensions explicitly
  wayland: fall back to shm buffers if drm fails
  wayland: add shm buffer code
  wayland: make buffer handling generic
  wayland: really fix buffer format selection
  wayland: fix pixel format
  wayland: clean up buffer creation code
  wayland: don't require the surfaceless extensions
  wayland: check for API-specific surfaceless extension
  wayland: fix GLES context creation
  wayland: use EGL_NO_SURFACE
  wayland: update to new api
  wayland: fix connecting to default socket
  fix ClutterContainer docs
2011-02-11 16:45:45 +00:00