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 <robert@linux.intel.com>

(cherry picked from commit 7ca01373efe908efc9f18f2cb7f4a51c274ef677)
This commit is contained in:
Neil Roberts 2012-12-13 15:27:52 +00:00 committed by Robert Bragg
parent fe3aa8b8b3
commit 41612bfc74
5 changed files with 52 additions and 1 deletions

View File

@ -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)

View File

@ -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,

View File

@ -0,0 +1,40 @@
#include <cogl/cogl.h>
#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);
}

View File

@ -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;

View File

@ -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;