* clutter/win32/clutter-stage-win32.c:

* clutter/win32/clutter-backend-win32.c: Reflect changes to the
	GLX/X11 backend in revisions 2708-2709 and 2713-2715 which
	simplify the backend a little.
This commit is contained in:
Neil Roberts 2008-05-15 22:03:22 +00:00
parent 53e031210a
commit 8ef653a9e8
3 changed files with 32 additions and 63 deletions

View File

@ -1,3 +1,10 @@
2008-05-15 Neil Roberts <neil@o-hand.com>
* clutter/win32/clutter-stage-win32.c:
* clutter/win32/clutter-backend-win32.c: Reflect changes to the
GLX/X11 backend in revisions 2708-2709 and 2713-2715 which
simplify the backend a little.
2008-05-15 Emmanuele Bassi <ebassi@openedhand.com>
* clutter/x11/clutter-backend-x11.c:

View File

@ -116,6 +116,9 @@ clutter_backend_win32_dispose (GObject *gobject)
CLUTTER_NOTE (BACKEND, "Removing the event source");
_clutter_backend_win32_events_uninit (CLUTTER_BACKEND (backend_win32));
/* Unrealize all shaders, since the GL context is going away */
_clutter_shader_release_all ();
if (backend_win32->gl_context)
{
wglDeleteContext (backend_win32->gl_context);
@ -313,33 +316,13 @@ clutter_backend_win32_create_stage (ClutterBackend *backend,
CLUTTER_NOTE (BACKEND, "Creating stage of type `%s'",
g_type_name (CLUTTER_STAGE_TYPE));
stage = g_object_new (CLUTTER_STAGE_TYPE, NULL);
stage = g_object_new (CLUTTER_TYPE_STAGE_WIN32, NULL);
/* copy backend data into the stage */
stage_win32 = CLUTTER_STAGE_WIN32 (stage);
stage_win32->backend = backend_win32;
stage_win32->wrapper = wrapper;
/* set the pointer back into the wrapper */
_clutter_stage_set_window (wrapper, CLUTTER_STAGE_WINDOW (stage));
/* needed ? */
g_object_set_data (G_OBJECT (stage), "clutter-backend", backend);
/* FIXME - is this needed? we should call realize inside the clutter
* init sequence for the default stage, and let the usual realization
* sequence be used for any other stage
*/
clutter_actor_realize (stage);
if (!CLUTTER_ACTOR_IS_REALIZED (stage))
{
g_set_error (error, CLUTTER_INIT_ERROR,
CLUTTER_INIT_ERROR_INTERNAL,
"Unable to realize the main stage");
return NULL;
}
return stage;
}

View File

@ -61,8 +61,7 @@ clutter_stage_win32_show (ClutterActor *actor)
if (stage_win32->hwnd)
ShowWindow (stage_win32->hwnd, SW_SHOW);
/* chain up */
CLUTTER_ACTOR_CLASS (clutter_stage_win32_parent_class)->show (actor);
CLUTTER_ACTOR_SET_FLAGS (actor, CLUTTER_ACTOR_MAPPED);
}
static void
@ -70,11 +69,10 @@ clutter_stage_win32_hide (ClutterActor *actor)
{
ClutterStageWin32 *stage_win32 = CLUTTER_STAGE_WIN32 (actor);
CLUTTER_ACTOR_UNSET_FLAGS (actor, CLUTTER_ACTOR_MAPPED);
if (stage_win32->hwnd)
ShowWindow (stage_win32->hwnd, SW_HIDE);
/* chain up */
CLUTTER_ACTOR_CLASS (clutter_stage_win32_parent_class)->hide (actor);
}
static void
@ -426,10 +424,7 @@ clutter_stage_win32_realize (ClutterActor *actor)
if (window_class == 0)
{
g_critical ("Unable to register window class");
CLUTTER_ACTOR_UNSET_FLAGS (stage_win32->wrapper,
CLUTTER_ACTOR_REALIZED);
CLUTTER_ACTOR_UNSET_FLAGS (actor, CLUTTER_ACTOR_REALIZED);
return;
goto fail;
}
/* If we're in fullscreen mode then use the fullscreen rect
@ -470,10 +465,7 @@ clutter_stage_win32_realize (ClutterActor *actor)
if (stage_win32->hwnd == NULL)
{
g_critical ("Unable to create stage window");
CLUTTER_ACTOR_UNSET_FLAGS (stage_win32->wrapper,
CLUTTER_ACTOR_REALIZED);
CLUTTER_ACTOR_UNSET_FLAGS (actor, CLUTTER_ACTOR_REALIZED);
return;
goto fail;
}
/* Get the position in case CW_USEDEFAULT was specified */
@ -513,10 +505,7 @@ clutter_stage_win32_realize (ClutterActor *actor)
|| !SetPixelFormat (stage_win32->client_dc, pf, &pfd))
{
g_critical ("Unable to find suitable GL pixel format");
CLUTTER_ACTOR_UNSET_FLAGS (stage_win32->wrapper,
CLUTTER_ACTOR_REALIZED);
CLUTTER_ACTOR_UNSET_FLAGS (actor, CLUTTER_ACTOR_REALIZED);
return;
goto fail;
}
if (backend_win32->gl_context == NULL)
@ -526,30 +515,26 @@ clutter_stage_win32_realize (ClutterActor *actor)
if (backend_win32->gl_context == NULL)
{
g_critical ("Unable to create suitable GL context");
CLUTTER_ACTOR_UNSET_FLAGS (stage_win32->wrapper,
CLUTTER_ACTOR_REALIZED);
CLUTTER_ACTOR_UNSET_FLAGS (actor, CLUTTER_ACTOR_REALIZED);
return;
goto fail;
}
/* Make the context current so we can check the GL version */
wglMakeCurrent (stage_win32->client_dc, backend_win32->gl_context);
if (!clutter_stage_win32_check_gl_version ())
{
g_critical ("OpenGL version number is too low");
goto fail;
}
}
/* below will call wglMakeCurrent */
CLUTTER_ACTOR_SET_FLAGS (stage_win32->wrapper, CLUTTER_ACTOR_REALIZED);
CLUTTER_NOTE (BACKEND, "Marking stage as realized");
CLUTTER_ACTOR_SET_FLAGS (stage_win32, CLUTTER_ACTOR_REALIZED);
clutter_stage_ensure_current (stage_win32->wrapper);
if (!clutter_stage_win32_check_gl_version ())
{
g_critical ("OpenGL version number is too low");
CLUTTER_ACTOR_UNSET_FLAGS (stage_win32->wrapper,
CLUTTER_ACTOR_REALIZED);
CLUTTER_ACTOR_UNSET_FLAGS (actor, CLUTTER_ACTOR_REALIZED);
return;
}
/* Make sure the viewport gets set up correctly */
CLUTTER_SET_PRIVATE_FLAGS (stage_win32->wrapper,
CLUTTER_ACTOR_SYNC_MATRICES);
return;
fail:
CLUTTER_ACTOR_UNSET_FLAGS (actor, CLUTTER_ACTOR_REALIZED);
}
static void
@ -564,12 +549,6 @@ clutter_stage_win32_unrealize (ClutterActor *actor)
*/
CLUTTER_ACTOR_CLASS (clutter_stage_win32_parent_class)->unrealize (actor);
/* Unrealize all shaders, since the GL context is going away */
_clutter_shader_release_all ();
/* As unrealised the context will now get cleared */
clutter_stage_ensure_current (stage_win32->wrapper);
if (stage_win32->client_dc)
{
ReleaseDC (stage_win32->hwnd, stage_win32->client_dc);