From 41612bfc7477e6c08b455ff6bbe71463c9521a2a Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Thu, 13 Dec 2012 15:27:52 +0000 Subject: [PATCH] Add a test for getting the component sizes from different fbs This adds a test which creates two offscreen framebuffers, one with just an alpha component texture and the other will a full RGBA texture. The bit sizes of both framebuffers are then checked to verify that they either have or haven't got bits for the RGB components. The test currently fails because the framebuffer functions don't bind the framebuffer before querying so they just query whichever framebuffer happened to be used last. Reviewed-by: Robert Bragg (cherry picked from commit 7ca01373efe908efc9f18f2cb7f4a51c274ef677) --- tests/conform/Makefile.am | 1 + tests/conform/test-conform-main.c | 3 ++ tests/conform/test-framebuffer-get-bits.c | 40 +++++++++++++++++++++++ tests/conform/test-utils.c | 6 ++++ tests/conform/test-utils.h | 3 +- 5 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 tests/conform/test-framebuffer-get-bits.c 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;