clutter/tests: Connect to ClutterStage:paint-view
ClutterStage:after-paint now does not guarantee a valid implicit framebuffer pushed to the stack. Instead, use the new 'paint-view' signal, that is emitted at a point in the drawing routine where a framebuffer is pushed. In addition to that, stop using the implicit framebuffer API and port the actor-shader-effect test to read from the view's framebuffer directly. https://gitlab.gnome.org/GNOME/mutter/merge_requests/623
This commit is contained in:
parent
4a19628829
commit
088117a619
@ -209,12 +209,14 @@ make_actor (GType shader_type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static guint32
|
static guint32
|
||||||
get_pixel (int x, int y)
|
get_pixel (CoglFramebuffer *fb,
|
||||||
|
int x,
|
||||||
|
int y)
|
||||||
{
|
{
|
||||||
guint8 data[4];
|
guint8 data[4];
|
||||||
|
|
||||||
cogl_read_pixels (x, y, 1, 1,
|
cogl_framebuffer_read_pixels (fb,
|
||||||
COGL_READ_PIXELS_COLOR_BUFFER,
|
x, y, 1, 1,
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
|
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
|
||||||
data);
|
data);
|
||||||
|
|
||||||
@ -224,19 +226,21 @@ get_pixel (int x, int y)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
paint_cb (ClutterStage *stage,
|
view_painted_cb (ClutterStage *stage,
|
||||||
|
ClutterStageView *view,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
|
CoglFramebuffer *fb = clutter_stage_view_get_framebuffer (view);
|
||||||
gboolean *was_painted = data;
|
gboolean *was_painted = data;
|
||||||
|
|
||||||
/* old shader effect */
|
/* old shader effect */
|
||||||
g_assert_cmpint (get_pixel (0, 25), ==, 0xff0000);
|
g_assert_cmpint (get_pixel (fb, 0, 25), ==, 0xff0000);
|
||||||
/* new shader effect */
|
/* new shader effect */
|
||||||
g_assert_cmpint (get_pixel (100, 25), ==, 0x00ffff);
|
g_assert_cmpint (get_pixel (fb, 100, 25), ==, 0x00ffff);
|
||||||
/* another new shader effect */
|
/* another new shader effect */
|
||||||
g_assert_cmpint (get_pixel (200, 25), ==, 0xff00ff);
|
g_assert_cmpint (get_pixel (fb, 200, 25), ==, 0xff00ff);
|
||||||
/* new shader effect */
|
/* new shader effect */
|
||||||
g_assert_cmpint (get_pixel (300, 25), ==, 0x00ffff);
|
g_assert_cmpint (get_pixel (fb, 300, 25), ==, 0x00ffff);
|
||||||
|
|
||||||
*was_painted = TRUE;
|
*was_painted = TRUE;
|
||||||
}
|
}
|
||||||
@ -271,8 +275,8 @@ actor_shader_effect (void)
|
|||||||
clutter_actor_show (stage);
|
clutter_actor_show (stage);
|
||||||
|
|
||||||
was_painted = FALSE;
|
was_painted = FALSE;
|
||||||
g_signal_connect (stage, "after-paint",
|
g_signal_connect_after (stage, "paint-view",
|
||||||
G_CALLBACK (paint_cb),
|
G_CALLBACK (view_painted_cb),
|
||||||
&was_painted);
|
&was_painted);
|
||||||
|
|
||||||
while (!was_painted)
|
while (!was_painted)
|
||||||
|
Loading…
Reference in New Issue
Block a user