[test-vertex-buffer-contiguous] Improves the texturing test

The test now explicitly reads back from the framebuffer to sanity check that
texturing is happening as expected, and it now uses a fixed 2x2 texture instead
of redhand.png since redhand.png doesn't have a power of two size which can
cause the vertex buffer code to complain on hardware not supporting npot
textures.
This commit is contained in:
Robert Bragg 2009-02-23 16:33:42 +00:00
parent 0bc1f36ead
commit 62ac234ca9
2 changed files with 27 additions and 9 deletions

View File

@ -121,13 +121,6 @@ full-report: full-report-generate
gnome-open "$$x"; \ gnome-open "$$x"; \
done done
redhand.png:
ln -sf $(top_srcdir)/tests/data/redhand.png
# NB: BUILT_SOURCES here a misnomer. We aren't building source, just inserting
# a phony rule that will generate symlink scripts for running individual tests
BUILT_SOURCES += redhand.png
EXTRA_DIST = ADDING_NEW_TESTS test-launcher.sh EXTRA_DIST = ADDING_NEW_TESTS test-launcher.sh
# we override the clean-generic target to clean up the wrappers so # we override the clean-generic target to clean up the wrappers so

View File

@ -59,6 +59,19 @@ validate_result (TestState *state)
g_print ("pixel 2 = %x, %x, %x\n", pixel[RED], pixel[GREEN], pixel[BLUE]); g_print ("pixel 2 = %x, %x, %x\n", pixel[RED], pixel[GREEN], pixel[BLUE]);
g_assert (pixel[RED] == 0 && pixel[GREEN] == 0 && pixel[BLUE] != 0); g_assert (pixel[RED] == 0 && pixel[GREEN] == 0 && pixel[BLUE] != 0);
/* Should see a green pixel, at bottom of 4th triangle */
glReadPixels (310, y_off, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &pixel);
if (g_test_verbose ())
g_print ("pixel 3 = %x, %x, %x\n", pixel[RED], pixel[GREEN], pixel[BLUE]);
g_assert (pixel[GREEN] > pixel[RED] && pixel[GREEN] > pixel[BLUE]);
/* Should see a red pixel, at top of 4th triangle */
glReadPixels (310, y_off + 70 , 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &pixel);
if (g_test_verbose ())
g_print ("pixel 4 = %x, %x, %x\n", pixel[RED], pixel[GREEN], pixel[BLUE]);
g_assert (pixel[RED] > pixel[GREEN] && pixel[RED] > pixel[BLUE]);
#undef RED #undef RED
#undef GREEN #undef GREEN
#undef BLUE #undef BLUE
@ -106,6 +119,7 @@ on_paint (ClutterActor *actor, TestState *state)
cogl_translate (100, 0, 0); cogl_translate (100, 0, 0);
cogl_vertex_buffer_disable (state->buffer, "gl_Color::blue"); cogl_vertex_buffer_disable (state->buffer, "gl_Color::blue");
cogl_set_source (state->material); cogl_set_source (state->material);
cogl_material_set_color4ub (state->material, 0xff, 0xff, 0xff, 0xff);
cogl_vertex_buffer_draw (state->buffer, cogl_vertex_buffer_draw (state->buffer,
GL_TRIANGLE_STRIP, /* mode */ GL_TRIANGLE_STRIP, /* mode */
0, /* first */ 0, /* first */
@ -131,6 +145,8 @@ queue_redraw (gpointer stage)
return TRUE; return TRUE;
} }
void void
test_vertex_buffer_contiguous (TestConformSimpleFixture *fixture, test_vertex_buffer_contiguous (TestConformSimpleFixture *fixture,
gconstpointer data) gconstpointer data)
@ -140,6 +156,12 @@ test_vertex_buffer_contiguous (TestConformSimpleFixture *fixture,
ClutterColor stage_clr = {0x0, 0x0, 0x0, 0xff}; ClutterColor stage_clr = {0x0, 0x0, 0x0, 0xff};
ClutterActor *group; ClutterActor *group;
guint idle_source; guint idle_source;
guchar tex_data[] = {
0xff, 0x00, 0x00, 0xff,
0xff, 0x00, 0x00, 0xff,
0x00, 0xff, 0x00, 0xff,
0x00, 0xff, 0x00, 0xff
};
state.frame = 0; state.frame = 0;
@ -161,10 +183,13 @@ test_vertex_buffer_contiguous (TestConformSimpleFixture *fixture,
g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state); g_signal_connect (group, "paint", G_CALLBACK (on_paint), &state);
state.texture = cogl_texture_new_from_file ("redhand.png", 64, state.texture = cogl_texture_new_from_data (2, 2,
0, /* max waste */
COGL_TEXTURE_NONE, COGL_TEXTURE_NONE,
COGL_PIXEL_FORMAT_RGBA_8888,
COGL_PIXEL_FORMAT_ANY, COGL_PIXEL_FORMAT_ANY,
NULL); 0, /* auto calc row stride */
tex_data);
state.material = cogl_material_new (); state.material = cogl_material_new ();
cogl_material_set_color4ub (state.material, 0x00, 0xff, 0x00, 0xff); cogl_material_set_color4ub (state.material, 0x00, 0xff, 0x00, 0xff);