Bug 1493 - GL ES does not work since Jan 9 in PowerVR SGX 535, Intel
The mapped flag needs to be set on the stage otherwise
clutter_actor_queue_redraw will never queue a redraw and never draw
anything.
In these two backends there is not really a way to hide the stage so
they both set the mapped flag immediatly when clutter_actor_show is
called.
Since the stage in the EGL native backend only has one size, and it
is determined at realization, we can simply set the SYNC_MATRICES
private flag and let _clutter_stage_maybe_setup_viewport() set up
the GL viewport at the first redraw.
* clutter/clutter-actor.c:
(clutter_actor_set_min_width),
(clutter_actor_set_min_height),
(clutter_actor_set_natural_width),
(clutter_actor_set_natural_height): If setting the minimum
and natural width and height on a top-level actor, and on
a backend that provides only static stages, then override
the value and use the size of the display as returned by
the backend.
* clutter/eglnative/clutter-stage-egl.c:
(clutter_stage_egl_realize): Remove the setting of the
minimum and natural width and height.
* clutter/clutter-stage.c:
(clutter_stage_allocate): Check if the stage provided by the
backend is static (i.e. a framebuffer that cannot be resized)
and interrupt the allocation chain there.
* clutter/eglnative/clutter-stage-egl.c:
(clutter_stage_egl_class_init): Remove the ::allocate empty
stub.
(clutter_stage_egl_realize): Use ES 2 renderable type when
building for GLES 2.
* clutter/eglnative/clutter-event-egl.c (get_backend_time): Added
a NULL for the microseconds parameter of g_timer_elapsed.
* clutter/eglnative/clutter-stage-egl.h:
* clutter/eglnative/clutter-egl.h:
* clutter/eglnative/clutter-backend-egl.h: Include
clutter-egl-headers.h instead of including the GL headers directly
so it can include gl2.h when building for GLES 2.
* clutter/eglnative/clutter-egl-headers.h:
* clutter/eglnative/Makefile.am (libclutter_eglnative_la_SOURCES):
Added clutter-egl-headers.h
* clutter/cogl/gles/cogl-fixed-fragment-shader.glsl: GLES 2
doesn't provide a default precision for floats in the fragment
shader and it will reject the shader if there isn't one.
* clutter/fruity/clutter-stage-fruity.c:
(clutter_stage_egl_show), (clutter_stage_egl_hide): Don't chain
up and set flags, as it is not needed anymore.
(clutter_stage_egl_realize): Set the REALIZED flag.
* clutter/eglnative/clutter-stage-egl.c:
(clutter_stage_egl_show), (clutter_stage_egl_hide): Don't chain
up and set flags, as it is not needed anymore.
Rework the stage wrapper/implementation relation: remove
duplicated code and all the bookkeeping from the backends into
ClutterStage whenever possible, to reduce the amount of work a
backend must do (and possibly get wrong). Thanks to Tommi
Komulainen.
* clutter/clutter-main.c:
(clutter_init_with_args), (clutter_init): Realize the default
stage after creation. The default stage is special, because we
use it in the initialization sequence. This removes the burden
from the backends and reduces the things a backend can get
wrong.
* clutter/clutter-stage.c:
(clutter_stage_show): Make sure to realize the implementation if
it hasn't been realized yet.
(clutter_stage_realize): Set the REALIZED flag and call
clutter_stage_ensure_current() if the implementation was
successfully realized.
(clutter_stage_unrealized): Call clutter_stage_ensure_current()
on unrealize.
* clutter/glx/clutter-backend-glx.c:
(clutter_backend_glx_create_stage): Do not realize the stage anymore
when creating it, and let the normal realization sequence take
place.
(clutter_backend_glx_ensure_context): Trap for X11 errors.
* clutter/glx/clutter-stage-glx.c:
(clutter_stage_glx_realize): Chain up to the X11 implementation
so that we can set up the window state (title, cursor visibility)
when we actually have a X window. Also, do not call
clutter_stage_ensure_current(), and rely on the wrapper to do
it for us. This means we can drop setting the REALIZED flag on
the wrapper.
(clutter_stage_glx_unrealize): Do not call
clutter_stage_ensure_current() ourselves, and rely on the wrapper
to do it for us.
* clutter/x11/clutter-stage-x11.c:
(set_wm_title), (set_cursor_visible): Move the WM title and
cursor visibility code inside their own functions.
(clutter_stage_x11_realize): Set the window title and whether the
cursor is visible or not after realizing the stage.
(clutter_stage_x11_set_cursor_visible),
(clutter_stage_x11_set_title): Call set_wm_title() and
set_cursor_visible().
(clutter_stage_x11_finalize): Free the title string.
* clutter/x11/clutter-stage-x11.h: Save more of the stage state,
so that we can set it even when the stage hasn't been realized
yet.
* clutter/eglnative/clutter-backend-egl.c:
(clutter_backend_egl_create_stage):
* clutter/eglnative/clutter-stage-egl.c:
(clutter_stage_egl_unrealize),
(clutter_stage_egl_realize): Update the eglnative backend.
* clutter/eglx/clutter-backend-egl.c:
(clutter_backend_egl_ensure_context),
(clutter_backend_egl_create_stage):
* clutter/eglx/clutter-stage-egl.c:
(clutter_stage_egl_unrealize),
(clutter_stage_egl_realize): Update the eglx backend.
* clutter/sdl/clutter-backend-sdl.c:
(clutter_backend_sdl_create_stage):
* clutter/sdl/clutter-stage-sdl.c:
(clutter_stage_sdl_realize): Update the sdl backend.
* clutter/fruity/clutter-backend-fruity.c:
(clutter_backend_fruity_create_stage):
* clutter/sdl/clutter-stage-fruity.c:
(clutter_stage_fruity_realize): Update the fruity backend.
* tests/test-multistage.c (on_button_press): Bail out if
clutter_stage_new() returns NULL.
* HACKING.backends: Update backend writing documentation.
* clutter/eglnative/clutter-backend-egl.c:
(clutter_backend_egl_redraw): Whitespace fixes.
* clutter/eglnative/clutter-stage-egl.c:
(clutter_stage_egl_hide): Indentation fixes.
(clutter_stage_egl_realize): Use g_critical() to report failure,
unset the flags and bail out instead of continuing the realization
of the stage.
* clutter/eglnative/clutter-backend-egl.[ch]:
* clutter/eglnative/clutter-stage-egl.[ch]:
* clutter/eglnative/clutter-event-egl.c: Port to the new stage
and backend APIs. *WARNING* untested and not compiled.
* clutter/eglx/clutter-backend-egl.c:
(clutter_backend_egl_init): Set some defaults.
* clutter/clutter-actor.c:
(clutter_actor_real_show),
(clutter_actor_real_hide): Do not set the MAPPED flag on the actor
if it is a top-level one (like ClutterStage); the backends are
responsible for setting that flag, as it might be the result of an
asynchronous operation (e.g. on X11).
* clutter/eglnative/clutter-stage-egl.c:
(clutter_stage_egl_show),
(clutter_stage_egl_hide): Set/unset the CLUTTER_ACTOR_MAPPED flag
on show and hide respectively.
* clutter/osx/clutter-stage-osx.c:
(clutter_stage_osx_show),
(clutter_stage_osx_hide): Ditto as above.
* clutter/sdl/clutter-stage-sdl.c:
(clutter_stage_sdl_show),
(clutter_stage_sdl_hide): Ditto as above, plus chain up to the
parent class show/hide virtual functions.
* clutter/x11/clutter-event-x11.c (event_translate): Use the MapNotify
and UnmapNotify events to call the X11 stage map/unmap functions.
* clutter/x11/clutter-stage-x11.[ch]:
(clutter_stage_x11_set_fullscreen): Set the fullscreen_on_map flag
with the fullscreen value.
(clutter_stage_x11_map), (clutter_stage_x11_unmap): Set the MAPPED
flag on the stage actor and redraw; also, if the fullscreen_on_map
flag was set, call clutter_stage_fullscreen() as well. (#648)
* tests/Makefile.am:
* tests/test-fullscreen.c: Add a fullscreen test case for checking
whether fullscreen works on every backend/platform.
* clutter/eglnative/clutter-backend-egl.c:
(clutter_backend_egl_dispose):
Call eglTerminate() on the display when the backend is disposed of.
* clutter/eglnative/clutter-stage-egl.c:
(clutter_stage_egl_realize):
Don't use the createNativeWindow() call, it's not generic EGL.
* clutter/Makefile.am:
* clutter/eglnative/Makefile.am:
* clutter/eglnative/clutter-backend-egl.c:
* clutter/eglnative/clutter-backend-egl.h:
* clutter/eglnative/clutter-egl.h:
* clutter/eglnative/clutter-event-egl.c:
* clutter/eglnative/clutter-stage-egl.c:
* clutter/eglnative/clutter-stage-egl.h:
* clutter/eglx/Makefile.am:
* clutter/eglx/clutter-backend-egl.c:
* clutter/eglx/clutter-egl.h:
* clutter/eglx/clutter-event-egl.c:
* clutter/eglx/clutter-stage-egl.c:
* configure.ac:
Add a new 'native' EGL backend for non X based EGL's
(i.e on framebuffer).
Rename old backend to 'eglx' and namespace public funcs with this.
* clutter/pango/pangoclutter-private.h:
Add extra checks for expected defines.