2008-05-12 Emmanuele Bassi <ebassi@openedhand.com>

* HACKING.backends: Update documentation.

	* clutter/glx/clutter-stage-glx.c:
	(clutter_stage_glx_realize): Avoid setting more flags than
	necessary.
This commit is contained in:
Emmanuele Bassi 2008-05-12 10:17:55 +00:00
parent 9144b3902e
commit 6fa7aeef85
3 changed files with 19 additions and 26 deletions

View File

@ -1,3 +1,11 @@
2008-05-12 Emmanuele Bassi <ebassi@openedhand.com>
* HACKING.backends: Update documentation.
* clutter/glx/clutter-stage-glx.c:
(clutter_stage_glx_realize): Avoid setting more flags than
necessary.
2008-05-09 Neil Roberts <neil@o-hand.com>
* clutter/clutter-frame-source.c (clutter_frame_source_add)

View File

@ -128,24 +128,20 @@ The stage implementation actor must implement at least the ::realize and
the stage implementation should:
- create a new native window handle
- create the drawing context (either GL or GLES) and assign it
to the backend, if it's not already present
- if the backend doesn't have a drawing context (either GL or GLES),
create one and assing it to the backend
- set the CLUTTER_ACTOR_REALIZED flag on *both* the wrapper and the
stage implementation
stage implementation (this is very important)
- call clutter_stage_ensure_current() with the wrapper instance
- set the private CLUTTER_ACTOR_SYNC_MATRICES flag on the stage wrapper
In case of failure, the CLUTTER_ACTOR_REALIZED flag should be unset on
both the wrapper and the stage implementation.
the stage implementation.
Inside the ::unrealize function the stage implementation should:
- unset the CLUTTER_ACTOR_REALIZED flag
- call _clutter_shader_release_all() if the backend supports shaders
and the GL programmable pipeline
- unset the CLUTTER_ACTOR_REALIZED flag on itself
- destroy the native window handle
- call clutter_stage_ensure_context() with the wrapper instance
- call clutter_stage_ensure_current() with the wrapper instance
NOTES
=====
@ -157,9 +153,8 @@ implementation for event handling and window management.
Usual points of failure for backends are:
- not setting the CLUTTER_ACTOR_REALIZED flag on the stage implementation
and the stage wrapper inside the ::realized virtual function;
- not setting the CLUTTER_ACTOR_SYNC_MATRICES on the stage wrapper
at the end of the ::realized virtual function;
and the stage wrapper inside the ::realized virtual function before
calling clutter_stage_ensure_current();
- calling public API, like clutter_actor_paint(), or checking properties
on the stage implementation instead of the ClutterStage wrapper.

View File

@ -153,8 +153,7 @@ clutter_stage_glx_realize (ClutterActor *actor)
if (!stage_x11->xvisinfo)
{
g_critical ("Unable to find suitable GL visual.");
CLUTTER_ACTOR_UNSET_FLAGS (actor, CLUTTER_ACTOR_REALIZED);
return;
goto fail;
}
if (stage_x11->xwin == None)
@ -211,8 +210,7 @@ clutter_stage_glx_realize (ClutterActor *actor)
if (backend_glx->gl_context == None)
{
g_critical ("Unable to create suitable GL context.");
CLUTTER_ACTOR_UNSET_FLAGS (actor, CLUTTER_ACTOR_REALIZED);
return;
goto fail;
}
}
@ -279,11 +277,7 @@ clutter_stage_glx_realize (ClutterActor *actor)
if (backend_glx->gl_context == None)
{
g_critical ("Unable to create suitable GL context.");
CLUTTER_ACTOR_UNSET_FLAGS (stage_x11->wrapper, CLUTTER_ACTOR_REALIZED);
CLUTTER_ACTOR_UNSET_FLAGS (stage_x11, CLUTTER_ACTOR_REALIZED);
return;
goto fail;
}
}
@ -301,13 +295,9 @@ clutter_stage_glx_realize (ClutterActor *actor)
}
}
/* Make sure the viewport gets set up correctly */
CLUTTER_SET_PRIVATE_FLAGS (stage_x11->wrapper, CLUTTER_ACTOR_SYNC_MATRICES);
return;
fail:
/* For one reason or another we cant realize the stage.. */
CLUTTER_ACTOR_UNSET_FLAGS (stage_x11->wrapper, CLUTTER_ACTOR_REALIZED);
CLUTTER_ACTOR_UNSET_FLAGS (actor, CLUTTER_ACTOR_REALIZED);
}