[cogl] Add a conformance test for point sprites
- From: Neil Roberts <nroberts src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cogl] Add a conformance test for point sprites
- Date: Wed, 7 Mar 2012 15:15:15 +0000 (UTC)
commit 1d59fccf10653853ce781560065b41418d9fa89b
Author: Neil Roberts <neil linux intel com>
Date: Tue Mar 6 23:36:45 2012 +0000
Add a conformance test for point sprites
This adds a conformance test which renders a texture point using a 2x2
texture with a different color for each texel. It then verifies that
each texel is mapped to the correct position on the point. The test is
currently failing.
The test requires the point sprite feature flag so this patch also
adds a TEST_REQUIREMENT_* flag for that.
Reviewed-by: Robert Bragg <robert linux intel com>
tests/conform/Makefile.am | 1 +
tests/conform/test-conform-main.c | 2 +
tests/conform/test-point-sprite.c | 129 +++++++++++++++++++++++++++++++++++++
tests/conform/test-utils.c | 6 ++
tests/conform/test-utils.h | 9 ++-
5 files changed, 143 insertions(+), 4 deletions(-)
---
diff --git a/tests/conform/Makefile.am b/tests/conform/Makefile.am
index 900db91..e6ffc7b 100644
--- a/tests/conform/Makefile.am
+++ b/tests/conform/Makefile.am
@@ -51,6 +51,7 @@ test_sources = \
test-read-texture-formats.c \
test-write-texture-formats.c \
test-point-size.c \
+ test-point-sprite.c \
$(NULL)
test_conformance_SOURCES = $(common_sources) $(test_sources)
diff --git a/tests/conform/test-conform-main.c b/tests/conform/test-conform-main.c
index 052bbb9..74f1ff0 100644
--- a/tests/conform/test-conform-main.c
+++ b/tests/conform/test-conform-main.c
@@ -100,6 +100,8 @@ main (int argc, char **argv)
ADD_TEST (test_cogl_offscreen, 0);
ADD_TEST (test_cogl_point_size, 0);
+ ADD_TEST (test_cogl_point_sprite,
+ TEST_KNOWN_FAILURE | TEST_REQUIREMENT_POINT_SPRITE);
UNPORTED_TEST (test_cogl_viewport);
diff --git a/tests/conform/test-point-sprite.c b/tests/conform/test-point-sprite.c
new file mode 100644
index 0000000..dc23e8a
--- /dev/null
+++ b/tests/conform/test-point-sprite.c
@@ -0,0 +1,129 @@
+#include <cogl/cogl2-experimental.h>
+
+#include "test-utils.h"
+
+#define POINT_SIZE 8
+
+static const CoglVertexP2T2
+point =
+ {
+ POINT_SIZE, POINT_SIZE,
+ 0.0f, 0.0f
+ };
+
+static const guint8
+tex_data[3 * 2 * 2] =
+ {
+ 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0x00, 0x00
+ };
+
+void
+test_cogl_point_sprite (TestUtilsGTestFixture *fixture,
+ void *data)
+{
+ TestUtilsSharedState *shared_state = data;
+ CoglContext *ctx = shared_state->ctx;
+ int fb_width = cogl_framebuffer_get_width (shared_state->fb);
+ int fb_height = cogl_framebuffer_get_height (shared_state->fb);
+ CoglPrimitive *prim;
+ GError *error = NULL;
+ CoglTexture2D *tex_2d;
+ CoglPipeline *pipeline, *solid_pipeline;
+ gboolean res;
+
+ cogl_framebuffer_orthographic (shared_state->fb,
+ 0, 0, /* x_1, y_1 */
+ fb_width, /* x_2 */
+ fb_height /* y_2 */,
+ -1, 100 /* near/far */);
+
+ cogl_framebuffer_clear4f (shared_state->fb,
+ COGL_BUFFER_BIT_COLOR,
+ 1.0f, 1.0f, 1.0f, 1.0f);
+
+ tex_2d = cogl_texture_2d_new_from_data (ctx,
+ 2, 2, /* width/height */
+ COGL_PIXEL_FORMAT_RGB_888,
+ COGL_PIXEL_FORMAT_ANY,
+ 6, /* row stride */
+ tex_data,
+ &error);
+ g_assert (tex_2d != NULL);
+ g_assert (error == NULL);
+
+ pipeline = cogl_pipeline_new (ctx);
+ cogl_pipeline_set_layer_texture (pipeline, 0, COGL_TEXTURE (tex_2d));
+
+ res = cogl_pipeline_set_layer_point_sprite_coords_enabled (pipeline,
+ /* layer_index */
+ 0,
+ /* enable */
+ TRUE,
+ &error);
+ g_assert (res == TRUE);
+ g_assert (error == NULL);
+
+ cogl_pipeline_set_layer_filters (pipeline,
+ 0, /* layer_index */
+ COGL_PIPELINE_FILTER_NEAREST,
+ COGL_PIPELINE_FILTER_NEAREST);
+ cogl_pipeline_set_point_size (pipeline, POINT_SIZE);
+
+ prim = cogl_primitive_new_p2t2 (ctx,
+ COGL_VERTICES_MODE_POINTS,
+ 1, /* n_vertices */
+ &point);
+
+ cogl_framebuffer_draw_primitive (shared_state->fb,
+ pipeline,
+ prim);
+
+ /* Render the primitive again without point sprites to make sure
+ disabling it works */
+ solid_pipeline = cogl_pipeline_copy (pipeline);
+ cogl_pipeline_set_layer_point_sprite_coords_enabled (solid_pipeline,
+ /* layer_index */
+ 0,
+ /* enable */
+ FALSE,
+ &error);
+ cogl_framebuffer_push_matrix (shared_state->fb);
+ cogl_framebuffer_translate (shared_state->fb,
+ POINT_SIZE * 2, /* x */
+ 0.0f, /* y */
+ 0.0f /* z */);
+ cogl_framebuffer_draw_primitive (shared_state->fb,
+ solid_pipeline,
+ prim);
+ cogl_framebuffer_pop_matrix (shared_state->fb);
+
+ cogl_object_unref (prim);
+ cogl_object_unref (solid_pipeline);
+ cogl_object_unref (pipeline);
+ cogl_object_unref (tex_2d);
+
+ test_utils_check_pixel (POINT_SIZE - POINT_SIZE / 4,
+ POINT_SIZE - POINT_SIZE / 4,
+ 0x0000ffff);
+ test_utils_check_pixel (POINT_SIZE + POINT_SIZE / 4,
+ POINT_SIZE - POINT_SIZE / 4,
+ 0x00ff00ff);
+ test_utils_check_pixel (POINT_SIZE - POINT_SIZE / 4,
+ POINT_SIZE + POINT_SIZE / 4,
+ 0x00ffffff);
+ test_utils_check_pixel (POINT_SIZE + POINT_SIZE / 4,
+ POINT_SIZE + POINT_SIZE / 4,
+ 0xff0000ff);
+
+ /* When rendering without the point sprites all of the texture
+ coordinates should be 0,0 so it should get the top-left texel
+ which is blue */
+ test_utils_check_region (POINT_SIZE * 3 - POINT_SIZE / 2 + 1,
+ POINT_SIZE - POINT_SIZE / 2 + 1,
+ POINT_SIZE - 2, POINT_SIZE - 2,
+ 0x0000ffff);
+
+ if (cogl_test_verbose ())
+ g_print ("OK\n");
+}
diff --git a/tests/conform/test-utils.c b/tests/conform/test-utils.c
index 08423dc..059c143 100644
--- a/tests/conform/test-utils.c
+++ b/tests/conform/test-utils.c
@@ -68,6 +68,12 @@ test_utils_init (TestUtilsSharedState *state,
missing_requirement = TRUE;
}
+ if (flags & TEST_REQUIREMENT_POINT_SPRITE &&
+ !cogl_has_feature (state->ctx, COGL_FEATURE_ID_POINT_SPRITE))
+ {
+ missing_requirement = TRUE;
+ }
+
if (flags & TEST_KNOWN_FAILURE)
{
missing_requirement = TRUE;
diff --git a/tests/conform/test-utils.h b/tests/conform/test-utils.h
index 3dbf94d..8dfd084 100644
--- a/tests/conform/test-utils.h
+++ b/tests/conform/test-utils.h
@@ -9,10 +9,11 @@
typedef enum _TestFlags
{
- TEST_KNOWN_FAILURE = 1<<0,
- TEST_REQUIREMENT_GL = 1<<1,
- TEST_REQUIREMENT_NPOT = 1<<2,
- TEST_REQUIREMENT_TEXTURE_3D = 1<<3
+ TEST_KNOWN_FAILURE = 1<<0,
+ TEST_REQUIREMENT_GL = 1<<1,
+ TEST_REQUIREMENT_NPOT = 1<<2,
+ TEST_REQUIREMENT_TEXTURE_3D = 1<<3,
+ TEST_REQUIREMENT_POINT_SPRITE = 1<<4
} TestFlags;
/* For compatability since we used to use the glib gtester
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]