summaryrefslogtreecommitdiff
path: root/testsuite/gsk/misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/gsk/misc.c')
-rw-r--r--testsuite/gsk/misc.c194
1 files changed, 194 insertions, 0 deletions
diff --git a/testsuite/gsk/misc.c b/testsuite/gsk/misc.c
index 7b4af1cf28..26c23b2301 100644
--- a/testsuite/gsk/misc.c
+++ b/testsuite/gsk/misc.c
@@ -1,10 +1,17 @@
#include <gtk/gtk.h>
#include "gsk/gskrendernodeprivate.h"
+#ifdef GDK_RENDERING_GL
+#include <gsk/gl/gskglrenderer.h>
+#endif
+
+#include <gobject/gvaluecollector.h>
+
static void
test_rendernode_gvalue (void)
{
GValue value = G_VALUE_INIT;
+ GValue value2 = G_VALUE_INIT;
GskRenderNode *node, *node2;
g_assert_false (GSK_VALUE_HOLDS_RENDER_NODE (&value));
@@ -23,7 +30,45 @@ test_rendernode_gvalue (void)
g_value_reset (&value);
gsk_value_take_render_node (&value, node);
+ g_value_init (&value2, GSK_TYPE_RENDER_NODE);
+ g_value_copy (&value, &value2);
+ g_assert_true (gsk_value_get_render_node (&value2) == node);
+
+ gsk_value_set_render_node (&value, NULL);
+ gsk_value_take_render_node (&value2, NULL);
+
g_value_unset (&value);
+ g_value_unset (&value2);
+}
+
+static void
+test_collect_varargs (GskRenderNode *node, ...)
+{
+ va_list ap;
+ char *err = NULL;
+ GValue value = G_VALUE_INIT;
+
+ g_value_init (&value, GSK_TYPE_RENDER_NODE);
+
+ va_start (ap, node);
+ G_VALUE_COLLECT (&value, ap, 0, &err);
+ va_end (ap);
+
+ g_assert_true (gsk_value_get_render_node (&value) == node);
+
+ g_value_unset (&value);
+}
+
+static void
+test_rendernode_varargs (void)
+{
+ GskRenderNode *node;
+
+ node = gsk_color_node_new (&(GdkRGBA){0,1,1,1}, &GRAPHENE_RECT_INIT (0, 0, 50, 50));
+
+ test_collect_varargs (node, node, NULL);
+
+ gsk_render_node_unref (node);
}
static void
@@ -82,6 +127,151 @@ test_conic_gradient_angle (void)
gsk_render_node_unref (node);
}
+static void
+test_container_disjoint (void)
+{
+ GskRenderNode *node, *nodes[2];
+
+ nodes[0] = gsk_color_node_new (&(GdkRGBA){0,1,1,1}, &GRAPHENE_RECT_INIT (0, 0, 50, 50));
+ nodes[1] = gsk_color_node_new (&(GdkRGBA){0,1,1,1}, &GRAPHENE_RECT_INIT (50, 0, 50, 50));
+ node = gsk_container_node_new (nodes, 2);
+
+ g_assert_true (gsk_container_node_is_disjoint (node));
+
+ gsk_render_node_unref (node);
+ gsk_render_node_unref (nodes[0]);
+ gsk_render_node_unref (nodes[1]);
+
+ nodes[0] = gsk_color_node_new (&(GdkRGBA){0,1,1,1}, &GRAPHENE_RECT_INIT (0, 0, 50, 50));
+ nodes[1] = gsk_color_node_new (&(GdkRGBA){0,1,1,1}, &GRAPHENE_RECT_INIT (25, 0, 50, 50));
+ node = gsk_container_node_new (nodes, 2);
+
+ g_assert_false (gsk_container_node_is_disjoint (node));
+
+ gsk_render_node_unref (node);
+ gsk_render_node_unref (nodes[0]);
+ gsk_render_node_unref (nodes[1]);
+}
+
+const char shader1[] =
+"uniform float progress;\n"
+"uniform sampler2D u_texture1;\n"
+"uniform sampler2D u_texture2;\n"
+""
+"vec4 getFromColor (vec2 uv) {\n"
+" return GskTexture(u_texture1, uv);\n"
+"}\n"
+"\n"
+"vec4 getToColor (vec2 uv) {\n"
+" return GskTexture(u_texture2, uv);\n"
+"}\n"
+"\n"
+"// author: bobylito\n"
+"// license: MIT\n"
+"const float SQRT_2 = 1.414213562373;\n"
+"uniform float dots;// = 20.0;\n"
+"uniform vec2 center; //= vec2(0, 0);\n"
+"\n"
+"uniform int test1 = -2;\n"
+"uniform uint test2 = 2u; \n"
+"uniform bool test3;\n"
+"uniform vec3 test4;\n"
+"uniform vec4 test5;\n"
+"\n"
+"vec4 transition(vec2 uv) {\n"
+" bool nextImage = distance(fract(uv * dots), vec2(0.5, 0.5)) < ( progress / distance(uv, center));\n"
+" return nextImage ? getToColor(uv) : getFromColor(uv);\n"
+"}\n"
+"\n"
+"void mainImage(out vec4 fragColor, in vec2 fragCoord, in vec2 resolution, in vec2 uv)\n"
+"{\n"
+" fragColor = transition(uv);\n"
+"}\n";
+
+static void
+test_renderer (GskRenderer *renderer)
+{
+ GdkDisplay *display;
+ gboolean realized;
+ GdkSurface *surface;
+ gboolean res;
+ GError *error = NULL;
+ GskGLShader *shader;
+ GBytes *bytes;
+
+ g_assert (GSK_IS_RENDERER (renderer));
+
+ display = gdk_display_open (NULL);
+
+ g_object_get (renderer,
+ "realized", &realized,
+ "surface", &surface,
+ NULL);
+
+ g_assert_false (realized);
+ g_assert_null (surface);
+
+ g_assert_null (gsk_renderer_get_surface (renderer));
+
+ surface = gdk_surface_new_toplevel (display);
+
+ res = gsk_renderer_realize (renderer, surface, &error);
+
+ g_assert_true (res);
+
+ g_assert_true (gsk_renderer_is_realized (renderer));
+ g_assert_true (gsk_renderer_get_surface (renderer) == surface);
+
+ bytes = g_bytes_new_static (shader1, sizeof (shader1));
+ shader = gsk_gl_shader_new_from_bytes (bytes);
+ g_bytes_unref (bytes);
+ res = gsk_gl_shader_compile (shader, renderer, &error);
+ if (GSK_IS_GL_RENDERER (renderer))
+ {
+ g_assert_true (res);
+ g_assert_no_error (error);
+ }
+ else
+ {
+ g_assert_false (res);
+ g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED);
+ g_clear_error (&error);
+ }
+
+ gsk_renderer_unrealize (renderer);
+
+ g_assert_false (gsk_renderer_is_realized (renderer));
+ g_assert_null (gsk_renderer_get_surface (renderer));
+
+ gdk_surface_destroy (surface);
+
+ gdk_display_close (display);
+}
+
+static void
+test_cairo_renderer (void)
+{
+ GskRenderer *renderer;
+
+ renderer = gsk_cairo_renderer_new ();
+ test_renderer (renderer);
+ g_clear_object (&renderer);
+}
+
+static void
+test_gl_renderer (void)
+{
+#ifdef GDK_RENDERING_GL
+ GskRenderer *renderer;
+
+ renderer = gsk_gl_renderer_new ();
+ test_renderer (renderer);
+ g_clear_object (&renderer);
+#else
+ g_test_skip ("no GL support");
+#endif
+}
+
int
main (int argc, char *argv[])
{
@@ -89,8 +279,12 @@ main (int argc, char *argv[])
gtk_init ();
g_test_add_func ("/rendernode/gvalue", test_rendernode_gvalue);
+ g_test_add_func ("/rendernode/varargs", test_rendernode_varargs);
g_test_add_func ("/rendernode/border/uniform", test_bordernode_uniform);
g_test_add_func ("/rendernode/conic-gradient/angle", test_conic_gradient_angle);
+ g_test_add_func ("/rendernode/container/disjoint", test_container_disjoint);
+ g_test_add_func ("/renderer/cairo", test_cairo_renderer);
+ g_test_add_func ("/renderer/gl", test_gl_renderer);
return g_test_run ();
}