[gtk/wip/otte/float-textures: 7/7] testsuite: Add tests for gdk_texture_download_float()
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/otte/float-textures: 7/7] testsuite: Add tests for gdk_texture_download_float()
- Date: Sun, 12 Sep 2021 03:33:13 +0000 (UTC)
commit 1eab32cdf9f0ce1162b843415da74d5cd3dab048
Author: Benjamin Otte <otte redhat com>
Date: Sun Sep 12 04:34:42 2021 +0200
testsuite: Add tests for gdk_texture_download_float()
testsuite/gdk/memorytexture.c | 99 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 99 insertions(+)
---
diff --git a/testsuite/gdk/memorytexture.c b/testsuite/gdk/memorytexture.c
index 4146d476ee..021a7ad11b 100644
--- a/testsuite/gdk/memorytexture.c
+++ b/testsuite/gdk/memorytexture.c
@@ -353,6 +353,50 @@ compare_textures (GdkTexture *expected,
g_free (test_data);
}
+static void
+compare_textures_float (GdkTexture *expected,
+ GdkTexture *test,
+ float eps,
+ gboolean has_alpha)
+{
+ static int R = 0;
+ static int G = 1;
+ static int B = 2;
+ static int A = 3;
+ float *expected_data, *test_data;
+ int width, height;
+ int x, y;
+
+ g_assert_cmpint (gdk_texture_get_width (expected), ==, gdk_texture_get_width (test));
+ g_assert_cmpint (gdk_texture_get_height (expected), ==, gdk_texture_get_height (test));
+
+ width = gdk_texture_get_width (expected);
+ height = gdk_texture_get_height (expected);
+
+ expected_data = g_new (float, width * height * 4);
+ gdk_texture_download_float (expected, expected_data, width * 4);
+
+ test_data = g_new (float, width * height * 4);
+ gdk_texture_download_float (test, test_data, width * 4);
+
+ for (y = 0; y < height; y++)
+ {
+ for (x = 0; x < width; x++)
+ {
+ g_assert_cmpfloat_with_epsilon (expected_data[y * width + 4 * x + R], test_data[y * width + 4 * x
+ R], eps);
+ g_assert_cmpfloat_with_epsilon (expected_data[y * width + 4 * x + G], test_data[y * width + 4 * x
+ G], eps);
+ g_assert_cmpfloat_with_epsilon (expected_data[y * width + 4 * x + B], test_data[y * width + 4 * x
+ B], eps);
+ if (has_alpha)
+ g_assert_cmpfloat_with_epsilon (expected_data[y * width + 4 * x + A], test_data[y * width + 4 *
x + A], eps);
+ else
+ g_assert_cmpfloat (1.0, ==, test_data[y * width + 4 * x + A]);
+ }
+ }
+
+ g_free (expected_data);
+ g_free (test_data);
+}
+
static GdkTexture *
upload_to_gl (GdkTexture *texture)
{
@@ -473,6 +517,59 @@ test_download_4x4 (gconstpointer data)
}
}
+static void
+test_download_float_1x1 (gconstpointer data)
+{
+ GdkMemoryFormat format;
+ TextureMethod method;
+ GdkTexture *expected, *test;
+ gsize i;
+
+ decode (data, &format, &method);
+
+ for (i = 0; i < N; i++)
+ {
+ GdkRGBA color;
+
+ create_random_color (&color);
+ expected = create_texture (GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED, TEXTURE_METHOD_LOCAL, 1, 1,
&color);
+ test = create_texture (format, method, 1, 1, &color);
+
+ compare_textures_float (expected, test,
+ G_MINFLOAT,
+ gdk_memory_format_has_alpha (format));
+
+ g_object_unref (expected);
+ g_object_unref (test);
+ }
+}
+
+static void
+test_download_float_4x4 (gconstpointer data)
+{
+ GdkMemoryFormat format;
+ TextureMethod method;
+ GdkTexture *expected, *test;
+ gsize i;
+
+ decode (data, &format, &method);
+
+ for (i = 0; i < N; i++)
+ {
+ GdkRGBA color;
+
+ create_random_color (&color);
+ expected = create_texture (GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED, TEXTURE_METHOD_LOCAL, 4, 4,
&color);
+ test = create_texture (format, method, 4, 4, &color);
+
+ compare_textures_float (expected, test, G_MINFLOAT, gdk_memory_format_has_alpha (format));
+
+ g_object_unref (expected);
+ g_object_unref (test);
+ }
+}
+
+
static void
add_test (const char *name,
GTestDataFunc func)
@@ -508,6 +605,8 @@ main (int argc, char *argv[])
add_test ("/memorytexture/download_1x1", test_download_1x1);
add_test ("/memorytexture/download_4x4", test_download_4x4);
+ add_test ("/memorytexture/download_float_1x1", test_download_float_1x1);
+ add_test ("/memorytexture/download_float_4x4", test_download_float_4x4);
surface = gdk_surface_new_toplevel (gdk_display_get_default());
gl_renderer = gsk_ngl_renderer_new ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]