diff options
Diffstat (limited to 'tests/conform/test-premult.c')
-rw-r--r-- | tests/conform/test-premult.c | 57 |
1 files changed, 34 insertions, 23 deletions
diff --git a/tests/conform/test-premult.c b/tests/conform/test-premult.c index 8c7b4d07..816c4873 100644 --- a/tests/conform/test-premult.c +++ b/tests/conform/test-premult.c @@ -16,6 +16,12 @@ #define MASK_BLUE(COLOR) ((COLOR & 0xff00) >> 8) #define MASK_ALPHA(COLOR) (COLOR & 0xff) +typedef enum _MakeTextureFlags +{ + TEXTURE_FLAG_SET_PREMULTIPLIED = 1, + TEXTURE_FLAG_SET_UNPREMULTIPLIED = 1<<1, +} MakeTextureFlags; + static guchar * gen_tex_data (uint32_t color) { @@ -41,20 +47,25 @@ gen_tex_data (uint32_t color) static CoglTexture * make_texture (uint32_t color, CoglPixelFormat src_format, - CoglPixelFormat internal_format) + MakeTextureFlags flags) { CoglTexture2D *tex_2d; guchar *tex_data = gen_tex_data (color); + CoglBitmap *bmp = cogl_bitmap_new_for_data (test_ctx, + QUAD_WIDTH, + QUAD_WIDTH, + src_format, + QUAD_WIDTH * 4, + tex_data); + + tex_2d = cogl_texture_2d_new_from_bitmap (bmp); - tex_2d = cogl_texture_2d_new_from_data (test_ctx, - QUAD_WIDTH, - QUAD_WIDTH, - src_format, - internal_format, - QUAD_WIDTH * 4, - tex_data, - NULL); + if (flags & TEXTURE_FLAG_SET_PREMULTIPLIED) + cogl_texture_set_premultiplied (tex_2d, TRUE); + else if (flags & TEXTURE_FLAG_SET_UNPREMULTIPLIED) + cogl_texture_set_premultiplied (tex_2d, FALSE); + cogl_object_unref (bmp); g_free (tex_data); return tex_2d; @@ -125,7 +136,7 @@ test_premult (void) "src = RGBA_8888, internal = RGBA_8888)\n"); tex = make_texture (0xff00ff80, COGL_PIXEL_FORMAT_RGBA_8888, /* src format */ - COGL_PIXEL_FORMAT_RGBA_8888); /* internal format */ + TEXTURE_FLAG_SET_UNPREMULTIPLIED); check_texture (pipeline, 0, 0, /* position */ tex, 0xff00ff80); /* expected */ @@ -138,21 +149,21 @@ test_premult (void) "src = RGBA_8888, internal = RGBA_8888_PRE)\n"); tex = make_texture (0xff00ff80, COGL_PIXEL_FORMAT_RGBA_8888, /* src format */ - COGL_PIXEL_FORMAT_RGBA_8888_PRE); /* internal format */ + TEXTURE_FLAG_SET_PREMULTIPLIED); check_texture (pipeline, 1, 0, /* position */ tex, 0x80008080); /* expected */ - /* If the user gives COGL_PIXEL_FORMAT_ANY for the internal format then - * by default Cogl should premultiply the given texture data... - * (In the future there will be additional Cogl API to control this - * behaviour) */ + /* If the user doesn't explicitly declare that the texture is premultiplied + * then Cogl should assume it is by default should premultiply + * unpremultiplied texture data... + */ if (cogl_test_verbose ()) g_print ("make_texture (0xff00ff80, " "src = RGBA_8888, internal = ANY)\n"); tex = make_texture (0xff00ff80, COGL_PIXEL_FORMAT_RGBA_8888, /* src format */ - COGL_PIXEL_FORMAT_ANY); /* internal format */ + 0); /* default premultiplied status */ check_texture (pipeline, 2, 0, /* position */ tex, 0x80008080); /* expected */ @@ -166,7 +177,7 @@ test_premult (void) "internal = RGBA_8888_PRE)\n"); tex = make_texture (0x80008080, COGL_PIXEL_FORMAT_RGBA_8888_PRE, /* src format */ - COGL_PIXEL_FORMAT_RGBA_8888_PRE); /* internal format */ + TEXTURE_FLAG_SET_PREMULTIPLIED); check_texture (pipeline, 3, 0, /* position */ tex, 0x80008080); /* expected */ @@ -179,7 +190,7 @@ test_premult (void) "src = RGBA_8888_PRE, internal = RGBA_8888)\n"); tex = make_texture (0x80008080, COGL_PIXEL_FORMAT_RGBA_8888_PRE, /* src format */ - COGL_PIXEL_FORMAT_RGBA_8888); /* internal format */ + TEXTURE_FLAG_SET_UNPREMULTIPLIED); check_texture (pipeline, 4, 0, /* position */ tex, 0xff00ff80); /* expected */ @@ -193,7 +204,7 @@ test_premult (void) "src = RGBA_8888_PRE, internal = ANY)\n"); tex = make_texture (0x80008080, COGL_PIXEL_FORMAT_RGBA_8888_PRE, /* src format */ - COGL_PIXEL_FORMAT_ANY); /* internal format */ + 0); /* default premultiplied status */ check_texture (pipeline, 5, 0, /* position */ tex, 0x80008080); /* expected */ @@ -207,7 +218,7 @@ test_premult (void) "src = RGBA_8888, internal = RGBA_8888)\n"); tex = make_texture (0xDEADBEEF, COGL_PIXEL_FORMAT_RGBA_8888, /* src format */ - COGL_PIXEL_FORMAT_RGBA_8888); /* internal format */ + TEXTURE_FLAG_SET_UNPREMULTIPLIED); if (cogl_test_verbose ()) g_print ("set_region (0xff00ff80, RGBA_8888)\n"); set_region (tex, 0xff00ff80, COGL_PIXEL_FORMAT_RGBA_8888); @@ -223,7 +234,7 @@ test_premult (void) "src = RGBA_8888, internal = RGBA_8888)\n"); tex = make_texture (0xDEADBEEF, COGL_PIXEL_FORMAT_RGBA_8888, /* src format */ - COGL_PIXEL_FORMAT_RGBA_8888); /* internal format */ + TEXTURE_FLAG_SET_UNPREMULTIPLIED); if (cogl_test_verbose ()) g_print ("set_region (0x80008080, RGBA_8888_PRE)\n"); set_region (tex, 0x80008080, COGL_PIXEL_FORMAT_RGBA_8888_PRE); @@ -238,7 +249,7 @@ test_premult (void) "internal = RGBA_8888_PRE)\n"); tex = make_texture (0xDEADBEEF, COGL_PIXEL_FORMAT_RGBA_8888_PRE, /* src format */ - COGL_PIXEL_FORMAT_RGBA_8888_PRE); /* internal format */ + TEXTURE_FLAG_SET_PREMULTIPLIED); if (cogl_test_verbose ()) g_print ("set_region (0x80008080, RGBA_8888_PRE)\n"); set_region (tex, 0x80008080, COGL_PIXEL_FORMAT_RGBA_8888_PRE); @@ -256,7 +267,7 @@ test_premult (void) "internal = RGBA_8888_PRE)\n"); tex = make_texture (0xDEADBEEF, COGL_PIXEL_FORMAT_RGBA_8888_PRE, /* src format */ - COGL_PIXEL_FORMAT_RGBA_8888_PRE); /* internal format */ + TEXTURE_FLAG_SET_PREMULTIPLIED); if (cogl_test_verbose ()) g_print ("set_region (0xff00ff80, RGBA_8888)\n"); set_region (tex, 0xff00ff80, COGL_PIXEL_FORMAT_RGBA_8888); |