mirror of
https://github.com/brl/mutter.git
synced 2025-01-11 12:12:25 +00:00
tests/cogl: Migrate point sprite tests
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2555>
This commit is contained in:
parent
41e5ee63d3
commit
590290cd6d
@ -1,6 +1,5 @@
|
||||
cogl_test_conformance_sources = [
|
||||
'test-conform-main.c',
|
||||
'test-point-sprite.c',
|
||||
'test-no-gl-header.c',
|
||||
'test-version.c',
|
||||
'test-layer-remove.c',
|
||||
|
@ -78,13 +78,6 @@ main (int argc, char **argv)
|
||||
TEST_REQUIREMENT_GL,
|
||||
0);
|
||||
|
||||
ADD_TEST (test_point_sprite,
|
||||
0, 0);
|
||||
ADD_TEST (test_point_sprite_orientation,
|
||||
0, TEST_KNOWN_FAILURE);
|
||||
ADD_TEST (test_point_sprite_glsl,
|
||||
0, 0);
|
||||
|
||||
ADD_TEST (test_alpha_test, 0, 0);
|
||||
|
||||
ADD_TEST (test_map_buffer_range, TEST_REQUIREMENT_MAP_WRITE, 0);
|
||||
|
@ -10,9 +10,6 @@ void test_npot_texture (void);
|
||||
void test_texture_get_set_data (void);
|
||||
void test_alpha_textures (void);
|
||||
void test_framebuffer_get_bits (void);
|
||||
void test_point_sprite (void);
|
||||
void test_point_sprite_orientation (void);
|
||||
void test_point_sprite_glsl (void);
|
||||
void test_alpha_test (void);
|
||||
void test_map_buffer_range (void);
|
||||
void test_primitive_and_journal (void);
|
||||
|
@ -22,6 +22,8 @@ cogl_tests = [
|
||||
[ 'test-write-texture-formats', [] ],
|
||||
[ 'test-point-size', [] ],
|
||||
[ 'test-point-size-attribute', [] ],
|
||||
[ 'test-point-sprite', [] ],
|
||||
[ 'test-point-sprite-known-failure', ['gl', 'gl3', 'gles2'] ],
|
||||
]
|
||||
|
||||
cogl_test_conformance_includes = [
|
||||
|
184
src/tests/cogl/conform/test-point-sprite-known-failure.c
Normal file
184
src/tests/cogl/conform/test-point-sprite-known-failure.c
Normal file
@ -0,0 +1,184 @@
|
||||
#include <cogl/cogl.h>
|
||||
|
||||
#include "tests/cogl-test-utils.h"
|
||||
|
||||
#define POINT_SIZE 8
|
||||
|
||||
static const CoglVertexP2T2
|
||||
point =
|
||||
{
|
||||
POINT_SIZE, POINT_SIZE,
|
||||
0.0f, 0.0f
|
||||
};
|
||||
|
||||
static const uint8_t
|
||||
tex_data[3 * 2 * 2] =
|
||||
{
|
||||
0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
|
||||
0x00, 0xff, 0xff, 0xff, 0x00, 0x00
|
||||
};
|
||||
|
||||
static void
|
||||
do_test (gboolean check_orientation,
|
||||
gboolean use_glsl)
|
||||
{
|
||||
int fb_width = cogl_framebuffer_get_width (test_fb);
|
||||
int fb_height = cogl_framebuffer_get_height (test_fb);
|
||||
CoglPrimitive *prim;
|
||||
GError *error = NULL;
|
||||
CoglTexture2D *tex_2d;
|
||||
CoglPipeline *pipeline, *solid_pipeline;
|
||||
int tex_height;
|
||||
|
||||
cogl_framebuffer_orthographic (test_fb,
|
||||
0, 0, /* x_1, y_1 */
|
||||
fb_width, /* x_2 */
|
||||
fb_height /* y_2 */,
|
||||
-1, 100 /* near/far */);
|
||||
|
||||
cogl_framebuffer_clear4f (test_fb,
|
||||
COGL_BUFFER_BIT_COLOR,
|
||||
1.0f, 1.0f, 1.0f, 1.0f);
|
||||
|
||||
/* If we're not checking the orientation of the point sprite then
|
||||
* we'll set the height of the texture to 1 so that the vertical
|
||||
* orientation does not matter */
|
||||
if (check_orientation)
|
||||
tex_height = 2;
|
||||
else
|
||||
tex_height = 1;
|
||||
|
||||
tex_2d = cogl_texture_2d_new_from_data (test_ctx,
|
||||
2, tex_height, /* width/height */
|
||||
COGL_PIXEL_FORMAT_RGB_888,
|
||||
6, /* row stride */
|
||||
tex_data,
|
||||
&error);
|
||||
g_assert (tex_2d != NULL);
|
||||
g_assert (error == NULL);
|
||||
|
||||
pipeline = cogl_pipeline_new (test_ctx);
|
||||
cogl_pipeline_set_layer_texture (pipeline, 0, tex_2d);
|
||||
|
||||
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);
|
||||
|
||||
/* If we're using GLSL then we don't need to enable point sprite
|
||||
* coords and we can just directly reference cogl_point_coord in the
|
||||
* snippet */
|
||||
if (use_glsl)
|
||||
{
|
||||
CoglSnippet *snippet =
|
||||
cogl_snippet_new (COGL_SNIPPET_HOOK_TEXTURE_LOOKUP,
|
||||
NULL, /* declarations */
|
||||
NULL /* post */);
|
||||
static const char source[] =
|
||||
" cogl_texel = texture2D (cogl_sampler, cogl_point_coord);\n";
|
||||
|
||||
cogl_snippet_set_replace (snippet, source);
|
||||
|
||||
/* Keep a reference to the original pipeline because there is no
|
||||
* way to remove a snippet in order to recreate the solid
|
||||
* pipeline */
|
||||
solid_pipeline = cogl_pipeline_copy (pipeline);
|
||||
|
||||
cogl_pipeline_add_layer_snippet (pipeline, 0, snippet);
|
||||
|
||||
cogl_object_unref (snippet);
|
||||
}
|
||||
else
|
||||
{
|
||||
gboolean res =
|
||||
cogl_pipeline_set_layer_point_sprite_coords_enabled (pipeline,
|
||||
/* layer_index */
|
||||
0,
|
||||
/* enable */
|
||||
TRUE,
|
||||
&error);
|
||||
g_assert (res == TRUE);
|
||||
g_assert (error == NULL);
|
||||
|
||||
solid_pipeline = cogl_pipeline_copy (pipeline);
|
||||
|
||||
res =
|
||||
cogl_pipeline_set_layer_point_sprite_coords_enabled (solid_pipeline,
|
||||
/* layer_index */
|
||||
0,
|
||||
/* enable */
|
||||
FALSE,
|
||||
&error);
|
||||
|
||||
g_assert (res == TRUE);
|
||||
g_assert (error == NULL);
|
||||
}
|
||||
|
||||
prim = cogl_primitive_new_p2t2 (test_ctx,
|
||||
COGL_VERTICES_MODE_POINTS,
|
||||
1, /* n_vertices */
|
||||
&point);
|
||||
|
||||
cogl_primitive_draw (prim, test_fb, pipeline);
|
||||
|
||||
/* Render the primitive again without point sprites to make sure
|
||||
disabling it works */
|
||||
|
||||
cogl_framebuffer_push_matrix (test_fb);
|
||||
cogl_framebuffer_translate (test_fb,
|
||||
POINT_SIZE * 2, /* x */
|
||||
0.0f, /* y */
|
||||
0.0f /* z */);
|
||||
cogl_primitive_draw (prim, test_fb, solid_pipeline);
|
||||
cogl_framebuffer_pop_matrix (test_fb);
|
||||
|
||||
cogl_object_unref (prim);
|
||||
cogl_object_unref (solid_pipeline);
|
||||
cogl_object_unref (pipeline);
|
||||
cogl_object_unref (tex_2d);
|
||||
|
||||
test_utils_check_pixel (test_fb,
|
||||
POINT_SIZE - POINT_SIZE / 4,
|
||||
POINT_SIZE - POINT_SIZE / 4,
|
||||
0x0000ffff);
|
||||
test_utils_check_pixel (test_fb,
|
||||
POINT_SIZE + POINT_SIZE / 4,
|
||||
POINT_SIZE - POINT_SIZE / 4,
|
||||
0x00ff00ff);
|
||||
test_utils_check_pixel (test_fb,
|
||||
POINT_SIZE - POINT_SIZE / 4,
|
||||
POINT_SIZE + POINT_SIZE / 4,
|
||||
check_orientation ?
|
||||
0x00ffffff :
|
||||
0x0000ffff);
|
||||
test_utils_check_pixel (test_fb,
|
||||
POINT_SIZE + POINT_SIZE / 4,
|
||||
POINT_SIZE + POINT_SIZE / 4,
|
||||
check_orientation ?
|
||||
0xff0000ff :
|
||||
0x00ff00ff);
|
||||
|
||||
/* 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 (test_fb,
|
||||
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");
|
||||
}
|
||||
|
||||
static void
|
||||
test_point_sprite_orientation (void)
|
||||
{
|
||||
do_test (TRUE /* check orientation */,
|
||||
FALSE /* don't use GLSL */);
|
||||
}
|
||||
|
||||
COGL_TEST_SUITE (
|
||||
g_test_add_func ("/point-sprite/orientation", test_point_sprite_orientation);
|
||||
)
|
@ -1,7 +1,6 @@
|
||||
#include <cogl/cogl.h>
|
||||
|
||||
#include "test-declarations.h"
|
||||
#include "test-utils.h"
|
||||
#include "tests/cogl-test-utils.h"
|
||||
|
||||
#define POINT_SIZE 8
|
||||
|
||||
@ -173,23 +172,21 @@ do_test (gboolean check_orientation,
|
||||
g_print ("OK\n");
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
test_point_sprite (void)
|
||||
{
|
||||
do_test (FALSE /* don't check orientation */,
|
||||
FALSE /* don't use GLSL */);
|
||||
}
|
||||
|
||||
void
|
||||
test_point_sprite_orientation (void)
|
||||
{
|
||||
do_test (TRUE /* check orientation */,
|
||||
FALSE /* don't use GLSL */);
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
test_point_sprite_glsl (void)
|
||||
{
|
||||
do_test (FALSE /* don't check orientation */,
|
||||
TRUE /* use GLSL */);
|
||||
}
|
||||
|
||||
COGL_TEST_SUITE (
|
||||
g_test_add_func ("/point-sprite/basic", test_point_sprite);
|
||||
g_test_add_func ("/point-sprite/glsl", test_point_sprite_glsl);
|
||||
)
|
Loading…
Reference in New Issue
Block a user