diff options
author | Rui Matos <tiagomatos@gmail.com> | 2016-04-22 17:19:45 +0200 |
---|---|---|
committer | Rui Matos <tiagomatos@gmail.com> | 2016-04-22 17:19:45 +0200 |
commit | 44a07fd74b8896556c719bd466eb9c6eb52ed2f4 (patch) | |
tree | 6d903af001ec7b994ca2261bfdf5a631a53d0ace /cogl/tests/conform/test-texture-no-allocate.c | |
parent | d148b445e447d04bb56b77adaa9dbd5c89d7696f (diff) | |
parent | 2d2835f02a80cc34feb5c4384a6a75c2406d4381 (diff) | |
download | mutter-44a07fd74b8896556c719bd466eb9c6eb52ed2f4.tar.gz |
Merge cogl's cogl-1.22 branch into mutter
Diffstat (limited to 'cogl/tests/conform/test-texture-no-allocate.c')
-rw-r--r-- | cogl/tests/conform/test-texture-no-allocate.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/cogl/tests/conform/test-texture-no-allocate.c b/cogl/tests/conform/test-texture-no-allocate.c new file mode 100644 index 000000000..b0199a988 --- /dev/null +++ b/cogl/tests/conform/test-texture-no-allocate.c @@ -0,0 +1,80 @@ +#include <cogl/cogl.h> + +#include "test-utils.h" + +/* Tests that the various texture types can be freed without being + * allocated */ + +/* Texture size that is probably to big to fit within the texture + * limits */ +#define BIG_TEX_WIDTH 16384 +#define BIG_TEX_HEIGHT 128 + +void +test_texture_no_allocate (void) +{ + uint8_t *tex_data; + CoglTexture *texture; + CoglTexture2D *texture_2d; + GError *error = NULL; + + tex_data = g_malloc (BIG_TEX_WIDTH * BIG_TEX_HEIGHT * 4); + + /* NB: if we make the atlas and sliced texture APIs public then this + * could changed to explicitly use that instead of the magic texture + * API */ + + /* Try to create an atlas texture that is too big so it will + * internally be freed without allocating */ + texture = + cogl_atlas_texture_new_from_data (test_ctx, + BIG_TEX_WIDTH, + BIG_TEX_HEIGHT, + /* format */ + COGL_PIXEL_FORMAT_RGBA_8888_PRE, + /* rowstride */ + BIG_TEX_WIDTH * 4, + tex_data, + &error); + + g_free (tex_data); + + /* It's ok if this causes an error, we just don't want it to + * crash */ + + if (texture == NULL) + cogl_error_free (error); + else + cogl_object_unref (texture); + + /* Try to create a sliced texture without allocating it */ + texture = + cogl_texture_2d_sliced_new_with_size (test_ctx, + BIG_TEX_WIDTH, + BIG_TEX_HEIGHT, + COGL_TEXTURE_MAX_WASTE); + cogl_object_unref (texture); + + /* 2D texture */ + texture_2d = cogl_texture_2d_new_with_size (test_ctx, + 64, 64); + cogl_object_unref (texture_2d); + + /* 3D texture */ + if (cogl_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_3D)) + { + CoglTexture3D *texture_3d = + cogl_texture_3d_new_with_size (test_ctx, + 64, 64, 64); + cogl_object_unref (texture_3d); + } + + /* Rectangle texture */ + if (cogl_has_feature (test_ctx, COGL_FEATURE_ID_TEXTURE_RECTANGLE)) + { + CoglTextureRectangle *texture_rect = + cogl_texture_rectangle_new_with_size (test_ctx, + 64, 64); + cogl_object_unref (texture_rect); + } +} |