cogl/tests/warp-modes: Test CoglPrimitive instead of cogl_polygon()

Change the warp modes test to sanity check CoglPrimitive based polygon
drawing instead of cogl_polygon(). This removes some checks, as
cogl_polygon() has explicitly documented special behaviour for automatic
wrap modes, which CoglPrimitive does not.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/935
This commit is contained in:
Jonas Ådahl 2019-11-22 12:05:45 +01:00 committed by Georges Basile Stavracas Neto
parent 5e117b3f5a
commit 9e2e44c0c2

View File

@ -73,12 +73,6 @@ wrap_modes[] =
COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE, COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE,
COGL_PIPELINE_WRAP_MODE_REPEAT, COGL_PIPELINE_WRAP_MODE_REPEAT,
COGL_PIPELINE_WRAP_MODE_AUTOMATIC,
COGL_PIPELINE_WRAP_MODE_AUTOMATIC,
COGL_PIPELINE_WRAP_MODE_AUTOMATIC,
COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE
}; };
static void static void
@ -108,12 +102,12 @@ draw_tests (TestState *state)
} }
} }
static const CoglTextureVertex vertices[4] = static const CoglVertexP3T2 vertices[4] =
{ {
{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, { .x = 0.0f, .y = 0.0f, .z = 0.0f, .s = 0.0f, .t = 0.0f },
{ 0.0f, TEX_SIZE * 2, 0.0f, 0.0f, 2.0f }, { .x = 0.0f, .y = TEX_SIZE * 2, .z = 0.0f, .s = 0.0f, .t = 2.0f },
{ TEX_SIZE * 2, TEX_SIZE * 2, 0.0f, 2.0f, 2.0f }, { .x = TEX_SIZE * 2, .y = TEX_SIZE * 2, .z = 0.0f, .s = 2.0f, .t = 2.0f },
{ TEX_SIZE * 2, 0.0f, 0.0f, 2.0f, 0.0f } { .x = TEX_SIZE * 2, .y = 0.0f, .z = 0.0f, .s = 2.0f, .t = 0.0f }
}; };
static void static void
@ -124,18 +118,23 @@ draw_tests_polygon (TestState *state)
for (i = 0; i < G_N_ELEMENTS (wrap_modes); i += 2) for (i = 0; i < G_N_ELEMENTS (wrap_modes); i += 2)
{ {
CoglPipelineWrapMode wrap_mode_s, wrap_mode_t; CoglPipelineWrapMode wrap_mode_s, wrap_mode_t;
CoglPrimitive *primitive;
CoglPipeline *pipeline; CoglPipeline *pipeline;
wrap_mode_s = wrap_modes[i]; wrap_mode_s = wrap_modes[i];
wrap_mode_t = wrap_modes[i + 1]; wrap_mode_t = wrap_modes[i + 1];
pipeline = create_pipeline (state, wrap_mode_s, wrap_mode_t); pipeline = create_pipeline (state, wrap_mode_s, wrap_mode_t);
cogl_set_source (pipeline); cogl_framebuffer_push_matrix (test_fb);
cogl_object_unref (pipeline); cogl_framebuffer_translate (test_fb, TEX_SIZE * i, 0.0f, 0.0f);
cogl_push_matrix ();
cogl_translate (TEX_SIZE * i, 0.0f, 0.0f);
/* Render the pipeline at four times the size of the texture */ /* Render the pipeline at four times the size of the texture */
cogl_polygon (vertices, G_N_ELEMENTS (vertices), FALSE); primitive = cogl_primitive_new_p3t2 (test_ctx,
cogl_pop_matrix (); COGL_VERTICES_MODE_TRIANGLE_FAN,
G_N_ELEMENTS (vertices),
vertices);
cogl_primitive_draw (primitive, test_fb, pipeline);
cogl_object_unref (primitive);
cogl_object_unref (pipeline);
cogl_framebuffer_pop_matrix (test_fb);
} }
} }
@ -194,7 +193,7 @@ validate_result (TestState *state)
#if 0 /* this doesn't currently work */ #if 0 /* this doesn't currently work */
validate_set (state, 1); /* atlased rectangle */ validate_set (state, 1); /* atlased rectangle */
#endif #endif
validate_set (state, 2); /* cogl_polygon */ validate_set (state, 2); /* CoglPrimitive */
} }
static void static void
@ -214,7 +213,7 @@ paint (TestState *state)
cogl_pop_matrix (); cogl_pop_matrix ();
cogl_object_unref (state->texture); cogl_object_unref (state->texture);
/* Draw the tests using cogl_polygon */ /* Draw the tests using CoglPrimitive */
state->texture = create_texture (TEST_UTILS_TEXTURE_NO_ATLAS); state->texture = create_texture (TEST_UTILS_TEXTURE_NO_ATLAS);
cogl_push_matrix (); cogl_push_matrix ();
cogl_translate (0.0f, TEX_SIZE * 4.0f, 0.0f); cogl_translate (0.0f, TEX_SIZE * 4.0f, 0.0f);