diff --git a/tests/conform/Makefile.am b/tests/conform/Makefile.am index 3cc1e144f..90d972ec1 100644 --- a/tests/conform/Makefile.am +++ b/tests/conform/Makefile.am @@ -62,6 +62,7 @@ test_sources = \ test-alpha-textures.c \ test-wrap-rectangle-textures.c \ test-texture-get-set-data.c \ + test-framebuffer-get-bits.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 b0aaebdd1..21df85125 100644 --- a/tests/conform/test-conform-main.c +++ b/tests/conform/test-conform-main.c @@ -98,6 +98,9 @@ main (int argc, char **argv) ADD_TEST (test_bitmask, 0, 0); ADD_TEST (test_offscreen, 0, 0); + ADD_TEST (test_framebuffer_get_bits, + TEST_REQUIREMENT_OFFSCREEN, + TEST_KNOWN_FAILURE); ADD_TEST (test_point_size, 0, 0); ADD_TEST (test_point_sprite, diff --git a/tests/conform/test-framebuffer-get-bits.c b/tests/conform/test-framebuffer-get-bits.c new file mode 100644 index 000000000..ac7ab5290 --- /dev/null +++ b/tests/conform/test-framebuffer-get-bits.c @@ -0,0 +1,40 @@ +#include + +#include "test-utils.h" + +void +test_framebuffer_get_bits (void) +{ + CoglTexture2D *tex_a = + cogl_texture_2d_new_with_size (test_ctx, + 16, 16, /* width/height */ + COGL_PIXEL_FORMAT_A_8); + CoglOffscreen *offscreen_a = + cogl_offscreen_new_to_texture (COGL_TEXTURE (tex_a)); + CoglFramebuffer *fb_a = COGL_FRAMEBUFFER (offscreen_a); + CoglTexture2D *tex_rgba = + cogl_texture_2d_new_with_size (test_ctx, + 16, 16, /* width/height */ + COGL_PIXEL_FORMAT_RGBA_8888); + CoglOffscreen *offscreen_rgba = + cogl_offscreen_new_to_texture (COGL_TEXTURE (tex_rgba)); + CoglFramebuffer *fb_rgba = COGL_FRAMEBUFFER (offscreen_rgba); + + cogl_framebuffer_allocate (fb_a, NULL); + cogl_framebuffer_allocate (fb_rgba, NULL); + + g_assert_cmpint (cogl_framebuffer_get_red_bits (fb_a), ==, 0); + g_assert_cmpint (cogl_framebuffer_get_green_bits (fb_a), ==, 0); + g_assert_cmpint (cogl_framebuffer_get_blue_bits (fb_a), ==, 0); + g_assert_cmpint (cogl_framebuffer_get_alpha_bits (fb_a), >=, 1); + + g_assert_cmpint (cogl_framebuffer_get_red_bits (fb_rgba), >=, 1); + g_assert_cmpint (cogl_framebuffer_get_green_bits (fb_rgba), >=, 1); + g_assert_cmpint (cogl_framebuffer_get_blue_bits (fb_rgba), >=, 1); + g_assert_cmpint (cogl_framebuffer_get_alpha_bits (fb_rgba), >=, 1); + + cogl_object_unref (fb_rgba); + cogl_object_unref (tex_rgba); + cogl_object_unref (fb_a); + cogl_object_unref (tex_a); +} diff --git a/tests/conform/test-utils.c b/tests/conform/test-utils.c index 6062ec646..b39dd1136 100644 --- a/tests/conform/test-utils.c +++ b/tests/conform/test-utils.c @@ -65,6 +65,12 @@ check_flags (TestFlags flags, return FALSE; } + if (flags & TEST_REQUIREMENT_OFFSCREEN && + !cogl_has_feature (test_ctx, COGL_FEATURE_ID_OFFSCREEN)) + { + return FALSE; + } + if (flags & TEST_KNOWN_FAILURE) { return FALSE; diff --git a/tests/conform/test-utils.h b/tests/conform/test-utils.h index ec96913d0..e698f3248 100644 --- a/tests/conform/test-utils.h +++ b/tests/conform/test-utils.h @@ -19,7 +19,8 @@ typedef enum _TestFlags TEST_REQUIREMENT_POINT_SPRITE = 1<<5, TEST_REQUIREMENT_GLES2_CONTEXT = 1<<6, TEST_REQUIREMENT_MAP_WRITE = 1<<7, - TEST_REQUIREMENT_GLSL = 1<<8 + TEST_REQUIREMENT_GLSL = 1<<8, + TEST_REQUIREMENT_OFFSCREEN = 1<<9 } TestFlags; extern CoglContext *test_ctx;