tests: don't delay/skip frames due to glReadPixel concerns
This greatly speeds up running all the conformance tests by no longer delaying many of the tests for a number of dummy frames to be painted. We used to skip frames because we thought there was a problem with the driver's glReadPixels implementation. Although we have seen driver issues at times the real reason the delay was needed was because resizing the stage usually happens asynchronously (because a non synchronous X request is used by clutter_stage_set_size()). We now force all X requests to be synchronized for the conformance tests so this is no longer a problem and we can avoid these hacks.
This commit is contained in:
parent
f47152c557
commit
4ca1e491da
@ -24,7 +24,6 @@ static const ClutterColor stage_color = { 0x0, 0x0, 0x0, 0xff };
|
|||||||
|
|
||||||
typedef struct _TestState
|
typedef struct _TestState
|
||||||
{
|
{
|
||||||
guint frame;
|
|
||||||
ClutterGeometry stage_geom;
|
ClutterGeometry stage_geom;
|
||||||
} TestState;
|
} TestState;
|
||||||
|
|
||||||
@ -127,12 +126,6 @@ test_blend (TestState *state,
|
|||||||
y_off = y * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
y_off = y * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
||||||
x_off = x * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
x_off = x * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
||||||
|
|
||||||
/* XXX:
|
|
||||||
* We haven't always had good luck with GL drivers implementing glReadPixels
|
|
||||||
* reliably and skipping the first two frames improves our chances... */
|
|
||||||
if (state->frame <= 2)
|
|
||||||
return;
|
|
||||||
|
|
||||||
cogl_read_pixels (x_off, y_off, 1, 1,
|
cogl_read_pixels (x_off, y_off, 1, 1,
|
||||||
COGL_READ_PIXELS_COLOR_BUFFER,
|
COGL_READ_PIXELS_COLOR_BUFFER,
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
|
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
|
||||||
@ -257,12 +250,6 @@ test_tex_combine (TestState *state,
|
|||||||
y_off = y * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
y_off = y * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
||||||
x_off = x * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
x_off = x * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
||||||
|
|
||||||
/* XXX:
|
|
||||||
* We haven't always had good luck with GL drivers implementing glReadPixels
|
|
||||||
* reliably and skipping the first two frames improves our chances... */
|
|
||||||
if (state->frame <= 2)
|
|
||||||
return;
|
|
||||||
|
|
||||||
cogl_read_pixels (x_off, y_off, 1, 1,
|
cogl_read_pixels (x_off, y_off, 1, 1,
|
||||||
COGL_READ_PIXELS_COLOR_BUFFER,
|
COGL_READ_PIXELS_COLOR_BUFFER,
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
|
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
|
||||||
@ -287,8 +274,6 @@ test_tex_combine (TestState *state,
|
|||||||
static void
|
static void
|
||||||
on_paint (ClutterActor *actor, TestState *state)
|
on_paint (ClutterActor *actor, TestState *state)
|
||||||
{
|
{
|
||||||
int frame_num;
|
|
||||||
|
|
||||||
test_blend (state, 0, 0, /* position */
|
test_blend (state, 0, 0, /* position */
|
||||||
0xff0000ff, /* src */
|
0xff0000ff, /* src */
|
||||||
0xffffffff, /* dst */
|
0xffffffff, /* dst */
|
||||||
@ -401,19 +386,8 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
"A = REPLACE (PREVIOUS)",
|
"A = REPLACE (PREVIOUS)",
|
||||||
0x2a2a2abb); /* expected */
|
0x2a2a2abb); /* expected */
|
||||||
|
|
||||||
/* XXX: Experiments have shown that for some buggy drivers, when using
|
|
||||||
* glReadPixels there is some kind of race, so we delay our test for a
|
|
||||||
* few frames and a few seconds:
|
|
||||||
*/
|
|
||||||
frame_num = state->frame++;
|
|
||||||
if (frame_num < 2)
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
|
|
||||||
/* Comment this out if you want visual feedback for what this test paints */
|
/* Comment this out if you want visual feedback for what this test paints */
|
||||||
#if 1
|
clutter_main_quit ();
|
||||||
if (frame_num == 3)
|
|
||||||
clutter_main_quit ();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -433,8 +407,6 @@ test_cogl_blend_strings (TestConformSimpleFixture *fixture,
|
|||||||
ClutterActor *group;
|
ClutterActor *group;
|
||||||
guint idle_source;
|
guint idle_source;
|
||||||
|
|
||||||
state.frame = 0;
|
|
||||||
|
|
||||||
stage = clutter_stage_get_default ();
|
stage = clutter_stage_get_default ();
|
||||||
|
|
||||||
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
|
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
|
||||||
@ -443,9 +415,9 @@ test_cogl_blend_strings (TestConformSimpleFixture *fixture,
|
|||||||
group = clutter_group_new ();
|
group = clutter_group_new ();
|
||||||
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
|
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
|
||||||
|
|
||||||
/* We force continuous redrawing of the stage, since we need to skip
|
/* We force continuous redrawing incase someone comments out the
|
||||||
* the first few frames, and we wont be doing anything else that
|
* clutter_main_quit and wants visual feedback for the test since we
|
||||||
* will trigger redrawing. */
|
* wont be doing anything else that will trigger redrawing. */
|
||||||
idle_source = g_idle_add (queue_redraw, stage);
|
idle_source = g_idle_add (queue_redraw, stage);
|
||||||
|
|
||||||
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
|
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
|
||||||
|
@ -26,7 +26,6 @@ static const ClutterColor stage_color = { 0x0, 0x0, 0x0, 0xff };
|
|||||||
|
|
||||||
typedef struct _TestState
|
typedef struct _TestState
|
||||||
{
|
{
|
||||||
guint frame;
|
|
||||||
ClutterGeometry stage_geom;
|
ClutterGeometry stage_geom;
|
||||||
} TestState;
|
} TestState;
|
||||||
|
|
||||||
@ -136,12 +135,6 @@ test_depth (TestState *state,
|
|||||||
y_off = y * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
y_off = y * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
||||||
x_off = x * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
x_off = x * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
||||||
|
|
||||||
/* XXX:
|
|
||||||
* We haven't always had good luck with GL drivers implementing glReadPixels
|
|
||||||
* reliably and skipping the first two frames improves our chances... */
|
|
||||||
if (state->frame <= 2)
|
|
||||||
return;
|
|
||||||
|
|
||||||
cogl_read_pixels (x_off, y_off, 1, 1,
|
cogl_read_pixels (x_off, y_off, 1, 1,
|
||||||
COGL_READ_PIXELS_COLOR_BUFFER,
|
COGL_READ_PIXELS_COLOR_BUFFER,
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
|
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
|
||||||
@ -153,7 +146,6 @@ test_depth (TestState *state,
|
|||||||
static void
|
static void
|
||||||
on_paint (ClutterActor *actor, TestState *state)
|
on_paint (ClutterActor *actor, TestState *state)
|
||||||
{
|
{
|
||||||
int frame_num;
|
|
||||||
CoglMatrix projection_save;
|
CoglMatrix projection_save;
|
||||||
CoglMatrix identity;
|
CoglMatrix identity;
|
||||||
|
|
||||||
@ -294,18 +286,7 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
cogl_pop_matrix ();
|
cogl_pop_matrix ();
|
||||||
cogl_set_projection_matrix (&projection_save);
|
cogl_set_projection_matrix (&projection_save);
|
||||||
|
|
||||||
/* XXX: Experiments have shown that for some buggy drivers, when using
|
clutter_main_quit ();
|
||||||
* glReadPixels there is some kind of race, so we delay our test for a
|
|
||||||
* few frames and a few seconds: */
|
|
||||||
frame_num = state->frame++;
|
|
||||||
if (frame_num < 2)
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
|
|
||||||
/* Comment this out if you want visual feedback for what this test paints */
|
|
||||||
#if 1
|
|
||||||
if (frame_num == 3)
|
|
||||||
clutter_main_quit ();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -325,8 +306,6 @@ test_cogl_depth_test (TestConformSimpleFixture *fixture,
|
|||||||
ClutterActor *group;
|
ClutterActor *group;
|
||||||
guint idle_source;
|
guint idle_source;
|
||||||
|
|
||||||
state.frame = 0;
|
|
||||||
|
|
||||||
stage = clutter_stage_get_default ();
|
stage = clutter_stage_get_default ();
|
||||||
|
|
||||||
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
|
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
|
||||||
@ -335,9 +314,9 @@ test_cogl_depth_test (TestConformSimpleFixture *fixture,
|
|||||||
group = clutter_group_new ();
|
group = clutter_group_new ();
|
||||||
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
|
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
|
||||||
|
|
||||||
/* We force continuous redrawing of the stage, since we need to skip
|
/* We force continuous redrawing incase someone comments out the
|
||||||
* the first few frames, and we wont be doing anything else that
|
* clutter_main_quit and wants visual feedback for the test since we
|
||||||
* will trigger redrawing. */
|
* wont be doing anything else that will trigger redrawing. */
|
||||||
idle_source = g_idle_add (queue_redraw, stage);
|
idle_source = g_idle_add (queue_redraw, stage);
|
||||||
|
|
||||||
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
|
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
|
||||||
|
@ -20,11 +20,8 @@ static const ClutterColor stage_color = { 0x0, 0x0, 0x0, 0xff };
|
|||||||
#define MASK_BLUE(COLOR) ((COLOR & 0xff00) >> 8);
|
#define MASK_BLUE(COLOR) ((COLOR & 0xff00) >> 8);
|
||||||
#define MASK_ALPHA(COLOR) (COLOR & 0xff);
|
#define MASK_ALPHA(COLOR) (COLOR & 0xff);
|
||||||
|
|
||||||
#define SKIP_FRAMES 2
|
|
||||||
|
|
||||||
typedef struct _TestState
|
typedef struct _TestState
|
||||||
{
|
{
|
||||||
guint frame;
|
|
||||||
ClutterGeometry stage_geom;
|
ClutterGeometry stage_geom;
|
||||||
} TestState;
|
} TestState;
|
||||||
|
|
||||||
@ -46,12 +43,6 @@ check_pixel (TestState *state, int x, int y, guint32 color)
|
|||||||
y_off = y * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
y_off = y * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
||||||
x_off = x * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
x_off = x * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
||||||
|
|
||||||
/* XXX:
|
|
||||||
* We haven't always had good luck with GL drivers implementing glReadPixels
|
|
||||||
* reliably and skipping the first two frames improves our chances... */
|
|
||||||
if (state->frame <= SKIP_FRAMES)
|
|
||||||
return;
|
|
||||||
|
|
||||||
cogl_read_pixels (x_off, y_off, 1, 1,
|
cogl_read_pixels (x_off, y_off, 1, 1,
|
||||||
COGL_READ_PIXELS_COLOR_BUFFER,
|
COGL_READ_PIXELS_COLOR_BUFFER,
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
|
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
|
||||||
@ -226,8 +217,6 @@ test_invalid_texture_layers_with_constant_colors (TestState *state,
|
|||||||
static void
|
static void
|
||||||
on_paint (ClutterActor *actor, TestState *state)
|
on_paint (ClutterActor *actor, TestState *state)
|
||||||
{
|
{
|
||||||
int frame_num;
|
|
||||||
|
|
||||||
test_invalid_texture_layers (state,
|
test_invalid_texture_layers (state,
|
||||||
0, 0 /* position */
|
0, 0 /* position */
|
||||||
);
|
);
|
||||||
@ -238,18 +227,9 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
2, 0 /* position */
|
2, 0 /* position */
|
||||||
);
|
);
|
||||||
|
|
||||||
/* XXX: Experiments have shown that for some buggy drivers, when using
|
|
||||||
* glReadPixels there is some kind of race, so we delay our test for a
|
|
||||||
* few frames and a few seconds:
|
|
||||||
*/
|
|
||||||
frame_num = state->frame++;
|
|
||||||
if (frame_num < SKIP_FRAMES)
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
|
|
||||||
/* Comment this out if you want visual feedback for what this test paints */
|
/* Comment this out if you want visual feedback for what this test paints */
|
||||||
#if 1
|
#if 1
|
||||||
if (frame_num > SKIP_FRAMES)
|
clutter_main_quit ();
|
||||||
clutter_main_quit ();
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,8 +250,6 @@ test_cogl_materials (TestConformSimpleFixture *fixture,
|
|||||||
ClutterActor *group;
|
ClutterActor *group;
|
||||||
guint idle_source;
|
guint idle_source;
|
||||||
|
|
||||||
state.frame = 0;
|
|
||||||
|
|
||||||
stage = clutter_stage_get_default ();
|
stage = clutter_stage_get_default ();
|
||||||
|
|
||||||
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
|
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
|
||||||
|
@ -15,7 +15,7 @@ static const ClutterColor stage_color = { 0x0, 0x0, 0x0, 0xff };
|
|||||||
|
|
||||||
typedef struct _TestState
|
typedef struct _TestState
|
||||||
{
|
{
|
||||||
guint frame;
|
guint padding;
|
||||||
} TestState;
|
} TestState;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -111,15 +111,6 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
0.5, 0.5, 1, 1 /* tex1 */
|
0.5, 0.5, 1, 1 /* tex1 */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* XXX:
|
|
||||||
* We haven't always had good luck with GL drivers implementing glReadPixels
|
|
||||||
* reliably and skipping the first two frames improves our chances... */
|
|
||||||
if (state->frame++ <= 2)
|
|
||||||
{
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
tex0 = make_texture (0x00);
|
tex0 = make_texture (0x00);
|
||||||
tex1 = make_texture (0x11);
|
tex1 = make_texture (0x11);
|
||||||
|
|
||||||
@ -191,8 +182,6 @@ test_cogl_multitexture (TestConformSimpleFixture *fixture,
|
|||||||
ClutterActor *group;
|
ClutterActor *group;
|
||||||
guint idle_source;
|
guint idle_source;
|
||||||
|
|
||||||
state.frame = 0;
|
|
||||||
|
|
||||||
stage = clutter_stage_get_default ();
|
stage = clutter_stage_get_default ();
|
||||||
|
|
||||||
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
|
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
|
||||||
@ -200,9 +189,9 @@ test_cogl_multitexture (TestConformSimpleFixture *fixture,
|
|||||||
group = clutter_group_new ();
|
group = clutter_group_new ();
|
||||||
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
|
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
|
||||||
|
|
||||||
/* We force continuous redrawing of the stage, since we need to skip
|
/* We force continuous redrawing incase someone comments out the
|
||||||
* the first few frames, and we wont be doing anything else that
|
* clutter_main_quit and wants visual feedback for the test since we
|
||||||
* will trigger redrawing. */
|
* wont be doing anything else that will trigger redrawing. */
|
||||||
idle_source = g_idle_add (queue_redraw, stage);
|
idle_source = g_idle_add (queue_redraw, stage);
|
||||||
|
|
||||||
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
|
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
|
||||||
|
@ -95,17 +95,12 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
cogl_set_source_texture (state->texture);
|
cogl_set_source_texture (state->texture);
|
||||||
cogl_rectangle (0, 0, TEXTURE_RENDER_SIZE, TEXTURE_RENDER_SIZE);
|
cogl_rectangle (0, 0, TEXTURE_RENDER_SIZE, TEXTURE_RENDER_SIZE);
|
||||||
|
|
||||||
/* XXX: Experiments have shown that for some buggy drivers, when using
|
/* XXX: validate_result calls clutter_stage_read_pixels which will result in
|
||||||
* glReadPixels there is some kind of race, so we delay our test for a
|
* another paint run so to avoid infinite recursion we only aim to validate
|
||||||
* few frames and a few seconds:
|
* the first frame. */
|
||||||
*/
|
|
||||||
/* Need to increment frame first because clutter_stage_read_pixels
|
|
||||||
fires a redraw */
|
|
||||||
frame_num = state->frame++;
|
frame_num = state->frame++;
|
||||||
if (frame_num == 2)
|
if (frame_num == 1)
|
||||||
validate_result (state);
|
validate_result (state);
|
||||||
else if (frame_num < 2)
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -247,17 +247,12 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
|
|
||||||
draw_frame (state);
|
draw_frame (state);
|
||||||
|
|
||||||
/* XXX: Experiments have shown that for some buggy drivers, when using
|
/* XXX: validate_result calls clutter_stage_read_pixels which will result in
|
||||||
* glReadPixels there is some kind of race, so we delay our test for a
|
* another paint run so to avoid infinite recursion we only aim to validate
|
||||||
* few frames and a few seconds:
|
* the first frame. */
|
||||||
*/
|
|
||||||
/* Need to increment frame first because clutter_stage_read_pixels
|
|
||||||
fires a redraw */
|
|
||||||
frame_num = state->frame++;
|
frame_num = state->frame++;
|
||||||
if (frame_num == 2)
|
if (frame_num == 1)
|
||||||
validate_result (state);
|
validate_result (state);
|
||||||
else if (frame_num < 2)
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -19,11 +19,8 @@ static const ClutterColor stage_color = { 0x0, 0x0, 0x0, 0xff };
|
|||||||
#define MASK_BLUE(COLOR) ((COLOR & 0xff00) >> 8);
|
#define MASK_BLUE(COLOR) ((COLOR & 0xff00) >> 8);
|
||||||
#define MASK_ALPHA(COLOR) (COLOR & 0xff);
|
#define MASK_ALPHA(COLOR) (COLOR & 0xff);
|
||||||
|
|
||||||
#define SKIP_FRAMES 2
|
|
||||||
|
|
||||||
typedef struct _TestState
|
typedef struct _TestState
|
||||||
{
|
{
|
||||||
guint frame;
|
|
||||||
ClutterGeometry stage_geom;
|
ClutterGeometry stage_geom;
|
||||||
CoglHandle passthrough_material;
|
CoglHandle passthrough_material;
|
||||||
} TestState;
|
} TestState;
|
||||||
@ -118,12 +115,6 @@ check_texture (TestState *state,
|
|||||||
y_off = y * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
y_off = y * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
||||||
x_off = x * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
x_off = x * QUAD_WIDTH + (QUAD_WIDTH / 2);
|
||||||
|
|
||||||
/* XXX:
|
|
||||||
* We haven't always had good luck with GL drivers implementing glReadPixels
|
|
||||||
* reliably and skipping the first two frames improves our chances... */
|
|
||||||
if (state->frame <= SKIP_FRAMES)
|
|
||||||
return;
|
|
||||||
|
|
||||||
cogl_read_pixels (x_off, y_off, 1, 1,
|
cogl_read_pixels (x_off, y_off, 1, 1,
|
||||||
COGL_READ_PIXELS_COLOR_BUFFER,
|
COGL_READ_PIXELS_COLOR_BUFFER,
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
|
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
|
||||||
@ -141,13 +132,12 @@ check_texture (TestState *state,
|
|||||||
static void
|
static void
|
||||||
on_paint (ClutterActor *actor, TestState *state)
|
on_paint (ClutterActor *actor, TestState *state)
|
||||||
{
|
{
|
||||||
int frame_num;
|
|
||||||
CoglHandle tex;
|
CoglHandle tex;
|
||||||
guchar *tex_data;
|
guchar *tex_data;
|
||||||
|
|
||||||
/* If the user explicitly specifies an unmultiplied internal format then
|
/* If the user explicitly specifies an unmultiplied internal format then
|
||||||
* Cogl shouldn't automatically premultiply the given texture data... */
|
* Cogl shouldn't automatically premultiply the given texture data... */
|
||||||
if (state->frame > SKIP_FRAMES && g_test_verbose ())
|
if (g_test_verbose ())
|
||||||
g_print ("make_texture (0xff00ff80, "
|
g_print ("make_texture (0xff00ff80, "
|
||||||
"src = RGBA_8888, internal = RGBA_8888)\n");
|
"src = RGBA_8888, internal = RGBA_8888)\n");
|
||||||
tex = make_texture (0xff00ff80,
|
tex = make_texture (0xff00ff80,
|
||||||
@ -160,7 +150,7 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
/* If the user explicitly requests a premultiplied internal format and
|
/* If the user explicitly requests a premultiplied internal format and
|
||||||
* gives unmultiplied src data then Cogl should always premultiply that
|
* gives unmultiplied src data then Cogl should always premultiply that
|
||||||
* for us */
|
* for us */
|
||||||
if (state->frame > SKIP_FRAMES && g_test_verbose ())
|
if (g_test_verbose ())
|
||||||
g_print ("make_texture (0xff00ff80, "
|
g_print ("make_texture (0xff00ff80, "
|
||||||
"src = RGBA_8888, internal = RGBA_8888_PRE)\n");
|
"src = RGBA_8888, internal = RGBA_8888_PRE)\n");
|
||||||
tex = make_texture (0xff00ff80,
|
tex = make_texture (0xff00ff80,
|
||||||
@ -174,7 +164,7 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
* by default Cogl should premultiply the given texture data...
|
* by default Cogl should premultiply the given texture data...
|
||||||
* (In the future there will be additional Cogl API to control this
|
* (In the future there will be additional Cogl API to control this
|
||||||
* behaviour) */
|
* behaviour) */
|
||||||
if (state->frame > SKIP_FRAMES && g_test_verbose ())
|
if (g_test_verbose ())
|
||||||
g_print ("make_texture (0xff00ff80, "
|
g_print ("make_texture (0xff00ff80, "
|
||||||
"src = RGBA_8888, internal = ANY)\n");
|
"src = RGBA_8888, internal = ANY)\n");
|
||||||
tex = make_texture (0xff00ff80,
|
tex = make_texture (0xff00ff80,
|
||||||
@ -187,7 +177,7 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
/* If the user requests a premultiplied internal texture format and supplies
|
/* If the user requests a premultiplied internal texture format and supplies
|
||||||
* premultiplied source data, Cogl should never modify that source data...
|
* premultiplied source data, Cogl should never modify that source data...
|
||||||
*/
|
*/
|
||||||
if (state->frame > SKIP_FRAMES && g_test_verbose ())
|
if (g_test_verbose ())
|
||||||
g_print ("make_texture (0x80008080, "
|
g_print ("make_texture (0x80008080, "
|
||||||
"src = RGBA_8888_PRE, "
|
"src = RGBA_8888_PRE, "
|
||||||
"internal = RGBA_8888_PRE)\n");
|
"internal = RGBA_8888_PRE)\n");
|
||||||
@ -201,7 +191,7 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
/* If the user requests an unmultiplied internal texture format, but
|
/* If the user requests an unmultiplied internal texture format, but
|
||||||
* supplies premultiplied source data, then Cogl should always
|
* supplies premultiplied source data, then Cogl should always
|
||||||
* un-premultiply the source data... */
|
* un-premultiply the source data... */
|
||||||
if (state->frame > SKIP_FRAMES && g_test_verbose ())
|
if (g_test_verbose ())
|
||||||
g_print ("make_texture (0x80008080, "
|
g_print ("make_texture (0x80008080, "
|
||||||
"src = RGBA_8888_PRE, internal = RGBA_8888)\n");
|
"src = RGBA_8888_PRE, internal = RGBA_8888)\n");
|
||||||
tex = make_texture (0x80008080,
|
tex = make_texture (0x80008080,
|
||||||
@ -215,7 +205,7 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
* source data then by default Cogl shouldn't modify the source data...
|
* source data then by default Cogl shouldn't modify the source data...
|
||||||
* (In the future there will be additional Cogl API to control this
|
* (In the future there will be additional Cogl API to control this
|
||||||
* behaviour) */
|
* behaviour) */
|
||||||
if (state->frame > SKIP_FRAMES && g_test_verbose ())
|
if (g_test_verbose ())
|
||||||
g_print ("make_texture (0x80008080, "
|
g_print ("make_texture (0x80008080, "
|
||||||
"src = RGBA_8888_PRE, internal = ANY)\n");
|
"src = RGBA_8888_PRE, internal = ANY)\n");
|
||||||
tex = make_texture (0x80008080,
|
tex = make_texture (0x80008080,
|
||||||
@ -229,13 +219,13 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
* Test cogl_texture_set_region() ....
|
* Test cogl_texture_set_region() ....
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (state->frame > SKIP_FRAMES && g_test_verbose ())
|
if (g_test_verbose ())
|
||||||
g_print ("make_texture (0xDEADBEEF, "
|
g_print ("make_texture (0xDEADBEEF, "
|
||||||
"src = RGBA_8888, internal = RGBA_8888)\n");
|
"src = RGBA_8888, internal = RGBA_8888)\n");
|
||||||
tex = make_texture (0xDEADBEEF,
|
tex = make_texture (0xDEADBEEF,
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888, /* src format */
|
COGL_PIXEL_FORMAT_RGBA_8888, /* src format */
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888); /* internal format */
|
COGL_PIXEL_FORMAT_RGBA_8888); /* internal format */
|
||||||
if (state->frame > SKIP_FRAMES && g_test_verbose ())
|
if (g_test_verbose ())
|
||||||
g_print ("set_region (0xff00ff80, RGBA_8888)\n");
|
g_print ("set_region (0xff00ff80, RGBA_8888)\n");
|
||||||
tex_data = gen_tex_data (0xff00ff80);
|
tex_data = gen_tex_data (0xff00ff80);
|
||||||
cogl_texture_set_region (tex,
|
cogl_texture_set_region (tex,
|
||||||
@ -253,13 +243,13 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
/* Updating a texture region for an unmultiplied texture using premultiplied
|
/* Updating a texture region for an unmultiplied texture using premultiplied
|
||||||
* region data should result in Cogl unmultiplying the given region data...
|
* region data should result in Cogl unmultiplying the given region data...
|
||||||
*/
|
*/
|
||||||
if (state->frame > SKIP_FRAMES && g_test_verbose ())
|
if (g_test_verbose ())
|
||||||
g_print ("make_texture (0xDEADBEEF, "
|
g_print ("make_texture (0xDEADBEEF, "
|
||||||
"src = RGBA_8888, internal = RGBA_8888)\n");
|
"src = RGBA_8888, internal = RGBA_8888)\n");
|
||||||
tex = make_texture (0xDEADBEEF,
|
tex = make_texture (0xDEADBEEF,
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888, /* src format */
|
COGL_PIXEL_FORMAT_RGBA_8888, /* src format */
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888); /* internal format */
|
COGL_PIXEL_FORMAT_RGBA_8888); /* internal format */
|
||||||
if (state->frame > SKIP_FRAMES && g_test_verbose ())
|
if (g_test_verbose ())
|
||||||
g_print ("set_region (0x80008080, RGBA_8888_PRE)\n");
|
g_print ("set_region (0x80008080, RGBA_8888_PRE)\n");
|
||||||
tex_data = gen_tex_data (0x80008080);
|
tex_data = gen_tex_data (0x80008080);
|
||||||
cogl_texture_set_region (tex,
|
cogl_texture_set_region (tex,
|
||||||
@ -275,14 +265,14 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
0xff00ff80); /* expected */
|
0xff00ff80); /* expected */
|
||||||
|
|
||||||
|
|
||||||
if (state->frame > SKIP_FRAMES && g_test_verbose ())
|
if (g_test_verbose ())
|
||||||
g_print ("make_texture (0xDEADBEEF, "
|
g_print ("make_texture (0xDEADBEEF, "
|
||||||
"src = RGBA_8888_PRE, "
|
"src = RGBA_8888_PRE, "
|
||||||
"internal = RGBA_8888_PRE)\n");
|
"internal = RGBA_8888_PRE)\n");
|
||||||
tex = make_texture (0xDEADBEEF,
|
tex = make_texture (0xDEADBEEF,
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888_PRE, /* src format */
|
COGL_PIXEL_FORMAT_RGBA_8888_PRE, /* src format */
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888_PRE); /* internal format */
|
COGL_PIXEL_FORMAT_RGBA_8888_PRE); /* internal format */
|
||||||
if (state->frame > SKIP_FRAMES && g_test_verbose ())
|
if (g_test_verbose ())
|
||||||
g_print ("set_region (0x80008080, RGBA_8888_PRE)\n");
|
g_print ("set_region (0x80008080, RGBA_8888_PRE)\n");
|
||||||
tex_data = gen_tex_data (0x80008080);
|
tex_data = gen_tex_data (0x80008080);
|
||||||
cogl_texture_set_region (tex,
|
cogl_texture_set_region (tex,
|
||||||
@ -301,14 +291,14 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
/* Updating a texture region for a premultiplied texture using unmultiplied
|
/* Updating a texture region for a premultiplied texture using unmultiplied
|
||||||
* region data should result in Cogl premultiplying the given region data...
|
* region data should result in Cogl premultiplying the given region data...
|
||||||
*/
|
*/
|
||||||
if (state->frame > SKIP_FRAMES && g_test_verbose ())
|
if (g_test_verbose ())
|
||||||
g_print ("make_texture (0xDEADBEEF, "
|
g_print ("make_texture (0xDEADBEEF, "
|
||||||
"src = RGBA_8888_PRE, "
|
"src = RGBA_8888_PRE, "
|
||||||
"internal = RGBA_8888_PRE)\n");
|
"internal = RGBA_8888_PRE)\n");
|
||||||
tex = make_texture (0xDEADBEEF,
|
tex = make_texture (0xDEADBEEF,
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888_PRE, /* src format */
|
COGL_PIXEL_FORMAT_RGBA_8888_PRE, /* src format */
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888_PRE); /* internal format */
|
COGL_PIXEL_FORMAT_RGBA_8888_PRE); /* internal format */
|
||||||
if (state->frame > SKIP_FRAMES && g_test_verbose ())
|
if (g_test_verbose ())
|
||||||
g_print ("set_region (0xff00ff80, RGBA_8888)\n");
|
g_print ("set_region (0xff00ff80, RGBA_8888)\n");
|
||||||
tex_data = gen_tex_data (0xff00ff80);
|
tex_data = gen_tex_data (0xff00ff80);
|
||||||
cogl_texture_set_region (tex,
|
cogl_texture_set_region (tex,
|
||||||
@ -323,20 +313,8 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
tex,
|
tex,
|
||||||
0x80008080); /* expected */
|
0x80008080); /* expected */
|
||||||
|
|
||||||
|
|
||||||
/* XXX: Experiments have shown that for some buggy drivers, when using
|
|
||||||
* glReadPixels there is some kind of race, so we delay our test for a
|
|
||||||
* few frames and a few seconds:
|
|
||||||
*/
|
|
||||||
frame_num = state->frame++;
|
|
||||||
if (frame_num < SKIP_FRAMES)
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
|
|
||||||
/* Comment this out if you want visual feedback for what this test paints */
|
/* Comment this out if you want visual feedback for what this test paints */
|
||||||
#if 1
|
clutter_main_quit ();
|
||||||
if (frame_num > SKIP_FRAMES)
|
|
||||||
clutter_main_quit ();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -356,7 +334,6 @@ test_cogl_premult (TestConformSimpleFixture *fixture,
|
|||||||
ClutterActor *group;
|
ClutterActor *group;
|
||||||
guint idle_source;
|
guint idle_source;
|
||||||
|
|
||||||
state.frame = 0;
|
|
||||||
state.passthrough_material = cogl_material_new ();
|
state.passthrough_material = cogl_material_new ();
|
||||||
cogl_material_set_blend (state.passthrough_material,
|
cogl_material_set_blend (state.passthrough_material,
|
||||||
"RGBA = ADD (SRC_COLOR, 0)", NULL);
|
"RGBA = ADD (SRC_COLOR, 0)", NULL);
|
||||||
@ -371,9 +348,9 @@ test_cogl_premult (TestConformSimpleFixture *fixture,
|
|||||||
group = clutter_group_new ();
|
group = clutter_group_new ();
|
||||||
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
|
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
|
||||||
|
|
||||||
/* We force continuous redrawing of the stage, since we need to skip
|
/* We force continuous redrawing incase someone comments out the
|
||||||
* the first few frames, and we wont be doing anything else that
|
* clutter_main_quit and wants visual feedback for the test since we
|
||||||
* will trigger redrawing. */
|
* wont be doing anything else that will trigger redrawing. */
|
||||||
idle_source = g_idle_add (queue_redraw, stage);
|
idle_source = g_idle_add (queue_redraw, stage);
|
||||||
|
|
||||||
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
|
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
|
||||||
|
@ -312,17 +312,12 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
|
|
||||||
draw_frame (state);
|
draw_frame (state);
|
||||||
|
|
||||||
/* XXX: Experiments have shown that for some buggy drivers, when using
|
/* XXX: validate_result calls clutter_stage_read_pixels which will result in
|
||||||
* glReadPixels there is some kind of race, so we delay our test for a
|
* another paint run so to avoid infinite recursion we only aim to validate
|
||||||
* few frames and a few seconds:
|
* the first frame. */
|
||||||
*/
|
|
||||||
/* Need to increment frame first because clutter_stage_read_pixels
|
|
||||||
fires a redraw */
|
|
||||||
frame_num = state->frame++;
|
frame_num = state->frame++;
|
||||||
if (frame_num == 2)
|
if (frame_num == 1)
|
||||||
validate_result (state);
|
validate_result (state);
|
||||||
else if (frame_num < 2)
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -10,7 +10,7 @@ static const ClutterColor stage_color = { 0x00, 0x00, 0x00, 0xff };
|
|||||||
|
|
||||||
typedef struct _TestState
|
typedef struct _TestState
|
||||||
{
|
{
|
||||||
guint frame;
|
guint padding;
|
||||||
} TestState;
|
} TestState;
|
||||||
|
|
||||||
/* Creates a texture where the pixels are evenly divided between
|
/* Creates a texture where the pixels are evenly divided between
|
||||||
@ -51,15 +51,6 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
CoglHandle material;
|
CoglHandle material;
|
||||||
guint8 pixels[8];
|
guint8 pixels[8];
|
||||||
|
|
||||||
/* XXX:
|
|
||||||
* We haven't always had good luck with GL drivers implementing glReadPixels
|
|
||||||
* reliably and skipping the first two frames improves our chances... */
|
|
||||||
if (state->frame++ <= 2)
|
|
||||||
{
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
tex = make_texture ();
|
tex = make_texture ();
|
||||||
material = cogl_material_new ();
|
material = cogl_material_new ();
|
||||||
cogl_material_set_layer (material, 0, tex);
|
cogl_material_set_layer (material, 0, tex);
|
||||||
@ -120,8 +111,6 @@ test_cogl_texture_mipmaps (TestConformSimpleFixture *fixture,
|
|||||||
ClutterActor *group;
|
ClutterActor *group;
|
||||||
guint idle_source;
|
guint idle_source;
|
||||||
|
|
||||||
state.frame = 0;
|
|
||||||
|
|
||||||
stage = clutter_stage_get_default ();
|
stage = clutter_stage_get_default ();
|
||||||
|
|
||||||
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
|
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
|
||||||
|
@ -8,7 +8,6 @@ static const ClutterColor stage_color = { 0x0, 0x0, 0x0, 0xff };
|
|||||||
typedef struct _TestState
|
typedef struct _TestState
|
||||||
{
|
{
|
||||||
ClutterActor *stage;
|
ClutterActor *stage;
|
||||||
guint frame;
|
|
||||||
} TestState;
|
} TestState;
|
||||||
|
|
||||||
static CoglHandle
|
static CoglHandle
|
||||||
@ -198,21 +197,9 @@ validate_result (TestState *state)
|
|||||||
static void
|
static void
|
||||||
on_paint (ClutterActor *actor, TestState *state)
|
on_paint (ClutterActor *actor, TestState *state)
|
||||||
{
|
{
|
||||||
int frame_num;
|
|
||||||
|
|
||||||
draw_frame (state);
|
draw_frame (state);
|
||||||
|
|
||||||
/* XXX: Experiments have shown that for some buggy drivers, when using
|
validate_result (state);
|
||||||
* glReadPixels there is some kind of race, so we delay our test for a
|
|
||||||
* few frames and a few seconds:
|
|
||||||
*/
|
|
||||||
/* Need to increment frame first because clutter_stage_read_pixels
|
|
||||||
fires a redraw */
|
|
||||||
frame_num = state->frame++;
|
|
||||||
if (frame_num == 2)
|
|
||||||
validate_result (state);
|
|
||||||
else if (frame_num < 2)
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -257,8 +244,6 @@ test_cogl_texture_rectangle (TestConformSimpleFixture *fixture,
|
|||||||
guint idle_source;
|
guint idle_source;
|
||||||
guint paint_handler;
|
guint paint_handler;
|
||||||
|
|
||||||
state.frame = 0;
|
|
||||||
|
|
||||||
state.stage = clutter_stage_get_default ();
|
state.stage = clutter_stage_get_default ();
|
||||||
|
|
||||||
/* Check whether GL supports the rectangle extension. If not we'll
|
/* Check whether GL supports the rectangle extension. If not we'll
|
||||||
|
@ -21,7 +21,6 @@ typedef struct _TestState
|
|||||||
CoglHandle texture;
|
CoglHandle texture;
|
||||||
CoglHandle material;
|
CoglHandle material;
|
||||||
ClutterGeometry stage_geom;
|
ClutterGeometry stage_geom;
|
||||||
guint frame;
|
|
||||||
} TestState;
|
} TestState;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -139,16 +138,7 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
0, /* first */
|
0, /* first */
|
||||||
3); /* count */
|
3); /* count */
|
||||||
|
|
||||||
/* XXX: Experiments have shown that for some buggy drivers, when using
|
validate_result (state);
|
||||||
* glReadPixels there is some kind of race, so we delay our test for a
|
|
||||||
* few frames and a few seconds:
|
|
||||||
*/
|
|
||||||
if (state->frame >= 2)
|
|
||||||
validate_result (state);
|
|
||||||
else
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
|
|
||||||
state->frame++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -177,8 +167,6 @@ test_cogl_vertex_buffer_contiguous (TestConformSimpleFixture *fixture,
|
|||||||
0x00, 0xff, 0x00, 0xff
|
0x00, 0xff, 0x00, 0xff
|
||||||
};
|
};
|
||||||
|
|
||||||
state.frame = 0;
|
|
||||||
|
|
||||||
stage = clutter_stage_get_default ();
|
stage = clutter_stage_get_default ();
|
||||||
|
|
||||||
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_clr);
|
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_clr);
|
||||||
@ -190,9 +178,9 @@ test_cogl_vertex_buffer_contiguous (TestConformSimpleFixture *fixture,
|
|||||||
state.stage_geom.height);
|
state.stage_geom.height);
|
||||||
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
|
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
|
||||||
|
|
||||||
/* We force continuous redrawing of the stage, since we need to skip
|
/* We force continuous redrawing incase someone comments out the
|
||||||
* the first few frames, and we wont be doing anything else that
|
* clutter_main_quit and wants visual feedback for the test since we
|
||||||
* will trigger redrawing. */
|
* wont be doing anything else that will trigger redrawing. */
|
||||||
idle_source = g_idle_add (queue_redraw, stage);
|
idle_source = g_idle_add (queue_redraw, stage);
|
||||||
|
|
||||||
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
|
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
|
||||||
|
@ -16,7 +16,6 @@ typedef struct _TestState
|
|||||||
{
|
{
|
||||||
CoglHandle buffer;
|
CoglHandle buffer;
|
||||||
ClutterGeometry stage_geom;
|
ClutterGeometry stage_geom;
|
||||||
guint frame;
|
|
||||||
} TestState;
|
} TestState;
|
||||||
|
|
||||||
typedef struct _InterlevedVertex
|
typedef struct _InterlevedVertex
|
||||||
@ -72,16 +71,7 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
0, /* first */
|
0, /* first */
|
||||||
3); /* count */
|
3); /* count */
|
||||||
|
|
||||||
/* XXX: Experiments have shown that for some buggy drivers, when using
|
validate_result (state);
|
||||||
* glReadPixels there is some kind of race, so we delay our test for a
|
|
||||||
* few frames and a few seconds:
|
|
||||||
*/
|
|
||||||
if (state->frame >= 2)
|
|
||||||
validate_result (state);
|
|
||||||
else
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
|
|
||||||
state->frame++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -102,8 +92,6 @@ test_cogl_vertex_buffer_interleved (TestConformSimpleFixture *fixture,
|
|||||||
ClutterActor *group;
|
ClutterActor *group;
|
||||||
guint idle_source;
|
guint idle_source;
|
||||||
|
|
||||||
state.frame = 0;
|
|
||||||
|
|
||||||
stage = clutter_stage_get_default ();
|
stage = clutter_stage_get_default ();
|
||||||
|
|
||||||
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_clr);
|
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_clr);
|
||||||
@ -115,9 +103,9 @@ test_cogl_vertex_buffer_interleved (TestConformSimpleFixture *fixture,
|
|||||||
state.stage_geom.height);
|
state.stage_geom.height);
|
||||||
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
|
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
|
||||||
|
|
||||||
/* We force continuous redrawing of the stage, since we need to skip
|
/* We force continuous redrawing incase someone comments out the
|
||||||
* the first few frames, and we wont be doing anything else that
|
* clutter_main_quit and wants visual feedback for the test since we
|
||||||
* will trigger redrawing. */
|
* wont be doing anything else that will trigger redrawing. */
|
||||||
idle_source = g_idle_add (queue_redraw, stage);
|
idle_source = g_idle_add (queue_redraw, stage);
|
||||||
|
|
||||||
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
|
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
|
||||||
|
@ -15,7 +15,6 @@ typedef struct _TestState
|
|||||||
{
|
{
|
||||||
CoglHandle buffer;
|
CoglHandle buffer;
|
||||||
ClutterGeometry stage_geom;
|
ClutterGeometry stage_geom;
|
||||||
guint frame;
|
|
||||||
} TestState;
|
} TestState;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -115,17 +114,7 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
0, /* first */
|
0, /* first */
|
||||||
3); /* count */
|
3); /* count */
|
||||||
|
|
||||||
|
validate_result (state);
|
||||||
/* XXX: Experiments have shown that for some buggy drivers, when using
|
|
||||||
* glReadPixels there is some kind of race, so we delay our test for a
|
|
||||||
* few frames and a few seconds:
|
|
||||||
*/
|
|
||||||
if (state->frame >= 2)
|
|
||||||
validate_result (state);
|
|
||||||
else
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
|
|
||||||
state->frame++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -146,8 +135,6 @@ test_cogl_vertex_buffer_mutability (TestConformSimpleFixture *fixture,
|
|||||||
ClutterActor *group;
|
ClutterActor *group;
|
||||||
guint idle_source;
|
guint idle_source;
|
||||||
|
|
||||||
state.frame = 0;
|
|
||||||
|
|
||||||
stage = clutter_stage_get_default ();
|
stage = clutter_stage_get_default ();
|
||||||
|
|
||||||
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_clr);
|
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_clr);
|
||||||
@ -159,9 +146,9 @@ test_cogl_vertex_buffer_mutability (TestConformSimpleFixture *fixture,
|
|||||||
state.stage_geom.height);
|
state.stage_geom.height);
|
||||||
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
|
clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
|
||||||
|
|
||||||
/* We force continuous redrawing of the stage, since we need to skip
|
/* We force continuous redrawing incase someone comments out the
|
||||||
* the first few frames, and we wont be doing anything else that
|
* clutter_main_quit and wants visual feedback for the test since we
|
||||||
* will trigger redrawing. */
|
* wont be doing anything else that will trigger redrawing. */
|
||||||
idle_source = g_idle_add (queue_redraw, stage);
|
idle_source = g_idle_add (queue_redraw, stage);
|
||||||
|
|
||||||
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
|
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
|
||||||
|
@ -11,7 +11,6 @@ typedef struct _TestState
|
|||||||
{
|
{
|
||||||
ClutterActor *stage;
|
ClutterActor *stage;
|
||||||
CoglHandle texture;
|
CoglHandle texture;
|
||||||
guint frame;
|
|
||||||
} TestState;
|
} TestState;
|
||||||
|
|
||||||
static CoglHandle
|
static CoglHandle
|
||||||
@ -273,21 +272,9 @@ validate_result (TestState *state)
|
|||||||
static void
|
static void
|
||||||
on_paint (ClutterActor *actor, TestState *state)
|
on_paint (ClutterActor *actor, TestState *state)
|
||||||
{
|
{
|
||||||
int frame_num;
|
|
||||||
|
|
||||||
draw_frame (state);
|
draw_frame (state);
|
||||||
|
|
||||||
/* XXX: Experiments have shown that for some buggy drivers, when using
|
validate_result (state);
|
||||||
* glReadPixels there is some kind of race, so we delay our test for a
|
|
||||||
* few frames and a few seconds:
|
|
||||||
*/
|
|
||||||
/* Need to increment frame first because clutter_stage_read_pixels
|
|
||||||
fires a redraw */
|
|
||||||
frame_num = state->frame++;
|
|
||||||
if (frame_num == 2)
|
|
||||||
validate_result (state);
|
|
||||||
else if (frame_num < 2)
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -306,8 +293,6 @@ test_cogl_wrap_modes (TestConformSimpleFixture *fixture,
|
|||||||
guint idle_source;
|
guint idle_source;
|
||||||
guint paint_handler;
|
guint paint_handler;
|
||||||
|
|
||||||
state.frame = 0;
|
|
||||||
|
|
||||||
state.stage = clutter_stage_get_default ();
|
state.stage = clutter_stage_get_default ();
|
||||||
|
|
||||||
clutter_stage_set_color (CLUTTER_STAGE (state.stage), &stage_color);
|
clutter_stage_set_color (CLUTTER_STAGE (state.stage), &stage_color);
|
||||||
|
@ -149,7 +149,7 @@ test_pick (TestConformSimpleFixture *fixture,
|
|||||||
|
|
||||||
clutter_actor_show (state.stage);
|
clutter_actor_show (state.stage);
|
||||||
|
|
||||||
g_timeout_add (250, (GSourceFunc) on_timeout, &state);
|
g_idle_add ((GSourceFunc) on_timeout, &state);
|
||||||
|
|
||||||
clutter_main ();
|
clutter_main ();
|
||||||
|
|
||||||
|
@ -153,17 +153,12 @@ on_paint (ClutterActor *actor, TestState *state)
|
|||||||
{
|
{
|
||||||
int frame_num;
|
int frame_num;
|
||||||
|
|
||||||
/* XXX: Experiments have shown that for some buggy drivers, when using
|
/* XXX: validate_result calls clutter_stage_read_pixels which will result in
|
||||||
* glReadPixels there is some kind of race, so we delay our test for a
|
* another paint run so to avoid infinite recursion we only aim to validate
|
||||||
* few frames and a few seconds:
|
* the first frame. */
|
||||||
*/
|
|
||||||
/* Need to increment frame first because clutter_stage_read_pixels
|
|
||||||
fires a redraw */
|
|
||||||
frame_num = state->frame++;
|
frame_num = state->frame++;
|
||||||
if (frame_num == 2)
|
if (frame_num == 1)
|
||||||
validate_result (state);
|
validate_result (state);
|
||||||
else if (frame_num < 2)
|
|
||||||
g_usleep (G_USEC_PER_SEC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
Loading…
Reference in New Issue
Block a user